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这两个文件复制到当前项目中,就能通过fromsnack 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.html、http://pydoc.org/1.5.2/snack.html、http://www.ibm.com/developerworks/cn/linux/guitoolkit/newt/index.html。(2)若有建议,请留言,在此先感谢!
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- Python 七步捉虫法