您的位置:首页 > 运维架构 > Linux

python在linux(anaconda)的图形界面(snack)

2015-10-20 12:53 1726 查看


一、简介

snack是一个用于在linux制作图形界面(GUI)的模块,该模块由c编写,而且redhat的系统都自带这个模块。Snack是python对newt的接口,Newt是一个为RedHat-linux安装程序而设计的基于文本的窗口开发工具, 并不依赖X包,所以Snack可以为安装程序设计简单的窗口界面。

借助snack可开发Linux安装程序字符界面。在Linux系统安装过程中选择文本模式安装,安装过程中出现的snack的界面。




二、详解

1、获取模块

若在Python中from snack import *,找不到模块,可以使用find命令查找:find /usr/lib64/python2.6/ -name snack.py。显示结果:/usr/lib64/python2.6/site-packages/snack.py,则只需要在目录/usr/lib64/python2.6/site-packages/下复制snack.py和_snackmodule.so这两个文件复制到当前项目中,就能通过from
snack import * 来导入snack模块。

2、demo程序

(1)代码:
#encoding=utf-8
import traceback
from snack import *

screen = SnackScreen()

def window1():
btn2 = Button('按钮1')
btn3 = Button('按钮2')
g = Grid(2, 1)
g.setField(btn2, 0, 0)
g.setField(btn3, 1, 0)
screen.gridWrappedWindow(g, "我的界面1")
f = Form()
f.add(g)
result = f.run()
screen.popWindow()
#btn2.setCallback(window2())  #设置回调方法为界面2
    #btn3.setCallback(leave())  #设置回调方法为离开  
    if result == btn2:
        btn2.setCallback(window2())  #设置回调方法为界面2
    else:
        btn3.setCallback(leave())  #设置回调方法为离开

def window2():
def print_name(name):
print '你的名称是:%s' % name

label = Label('请输入名称:')
entry = Entry(10, '')
btn1 = Button('确定')
g = Grid(2, 2)
g.setField(label, 0, 0)
g.setField(entry, 1, 0)
g.setField(btn1, 1, 1)
screen.gridWrappedWindow(g, "我的界面2")
f = Form()  #实例化一个form
f.add(g)    #把网格填充到form
result = f.run()
screen.popWindow()
btn1.setCallback(print_name(entry.value()))

def leave():
print 'leave'
return ''

def main():
try:
window1()
except:
print traceback.format_exc()
finally:
screen.finish()  #关闭snack界面
return ''

main()
(2)运行(有些问题存在)





(3)解释:首先调用screen = SnackScreen() 将终端的背景刷成蓝色,直到调用screen.finish()蓝色的屏幕才能消失;使用gird设置组件的布局,g
= Grid(2, 2),g为2个Widget宽,2个Widget的网格;screen.gridWrappedWindow(g, "Title Text")必须调用,用来将g绑定到一个window;screen.finish()退出snack,否则终端一直呈现蓝色,无论按crtrl+c或者ctrl+z都不能退出。

3、snack相关组件

组件类
参数
方法
Button(text)
text: 显示的名称
(下同)
CompactButton(text)
同Button类,但显示的按钮更简洁
Checkbox
(text, isOn = 0)

isOn=0:未选中
isOn=1:选中
value():
返回box是否被选中
Selected():
返回box当前是否被选中
setFlags(flag,senese)
Flag: FLAG_DISABLED
Sense:
FLAGS_SET:true
FLAGS_RESET:false
FLAGS_TOGGLE:flag的相反值
SingleRadioButton
(text,group,isOn = 0)
group:如果当前的SingleRadioButton对象与上一个为一组,则group值为上一个SingleRadioButton对象
selected() :返回此SingRadioButton是否被选中
Listbox(height,
scroll = 0,
returnExit = 0,
width = 0,
showCursor = 0):
列出可选项,但每次只能选择一项,如果想选择多项,可使用CheckBoxList

height:Listbox里显示的行数;
scroll:是否显示滚动条;
returnExit:
如果在box内按下ENTER时,窗口将退出;
width:设置Listbox的宽度;
showCursor:值为1则Listbox内的当前条目会有光标闪动。
append(text, item):
增加一个选项在Listbox末尾,其中item为选项ID;
Insert(text, item, before):
在before选项前添加,如果before设为None,则添加到开头;
delete(item) :
删除选项item;
replace(text, item):
将item当前的名称替换为text;
current():
返回用户当前的选项的item;
setCurrent(item):
设置item为当前选项;
clear(): 清空Listbox内的所有选项。
Textbox(width,
height, text,
scroll = 0,
wrap = 0)
显示文本

scroll:设置有无滚动条;
wrap:设置是否确保所有文本在box内。
setText(text): 设置在Textbox上显示的文本
Scale(width, total)
进度条组件
total: 进度条显示的最大值
set(amount): 用来设置当前进度,其中amount是一个0到total之间的数,
Entry(width,
text = "",
hidden = 0,
password = 0,
scroll = 1,
returnExit = 0)
输入框
width:输入文本的大小;
text:输入框的初始文本;
hidden:是否隐藏text;
password:输入的text是否未密码,如果是密码,将显示为*;
scroll:若scroll=1,则当文本太长不足以显示的时候,用户可以水平滚动。
value():返回在Entry里当前的文本
set(text):
设置当前要显示的文本为text
setFlags(flag, sense): 同Checkbox的成员函数setFlag
RadioBar(screen,
buttonlist)
用来创建一组SingleRadioButton
buttonlist是由tuple组成的list,每个tuple有三个元素,第一个是SingleRadioButton显示的名称,第二个是当SingleRadioButton被选时的返回对象,第三个是0或1,1代表默认选中。
add(title, value, default = None):添加一个新的SingleRadioButton到Radio
Button组里,其中value参数为getSeletion函数的返回对象;
getSelection():返回当前选中的Radio Button的相关的返回对象。
ButtonBar(screen, buttonlist): 提供一组buttons
Buttonlist是由描述button的三个不同类型组成,分别是(text, return value, hotkey),两个元素代表没有hotkey,
一个string类型代表返回对象同string。
CheckboxtTree(height, scroll = 0)
由多个Checkbox对象组成。
append(text, item = None, selected = 0):添加一个Checkbox到tree的末尾,其中selected=0,则初始化未选中,
等于1为选中;
getCurrent():
返回光标高亮的元素;
getSelection():
返回所有选中元素的list;
setEntry(item, text):
改变与item相关的text;
setEntryValue(item, selected = 1):
设置item是否选中;
getEntryValue(item):返回item是否被选中;
addItem(text, path, item = None, selected = 0)

4、部分组件代码

(1)ButtonChoiceWindow:
#encoding=utf-8
from snack import SnackScreen, ButtonChoiceWindow
screen = SnackScreen()
ButtonChoiceWindow(screen, 'Fatal Error',
'You do not have enough RAM to install on this machine.\n'
'\n'
'Press <return> to reboot your system.\n', )
#buttons = ("OK",))
screen.finish()



或:
#encoding=utf-8
from snack import *
screen = SnackScreen()
ButtonChoiceWindow(screen, title="ButtonChoiceWindowDemo",  text= "text:choice", buttons = ['Ok','Cancel'],
width = 40, x = None, y = None, help = None)
screen.finish()



(2)ListboxChoiceWindow:
#encoding=utf-8
from snack import *
screen = SnackScreen()
ListboxChoiceWindow(screen, title="ListboxChoiceWindow Demo", text="List:", items=[("list1",1),("list2",2)],
buttons = ('Ok', 'Cancel'), width = 40, scroll =0, height = -1, default = None, help = None)
screen.finish()



(3)EntryWindow:
#encoding=utf-8
from snack import *
screen = SnackScreen()
EntryWindow(screen, title="EntryWindowDemo", text="text:", prompts=["entry1", "entry2", "entry3"], allowCancel = 1,
width = 40, entryWidth = 20, buttons = [ 'Ok','Cancel' ], help = None)
screen.finish()




三、总结

(1)参考:http://www.wanware.com/tsgdocs/snack.htmlhttp://pydoc.org/1.5.2/snack.htmlhttp://www.ibm.com/developerworks/cn/linux/guitoolkit/newt/index.html

(2)若有建议,请留言,在此先感谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python snack