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

来源:互联网 发布:2017年海关数据 编辑:程序博客网 时间:2024/06/04 19:37

一、简介

       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-8import tracebackfrom 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相关组件

组件类

参数

方法

Buttontext)

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

 

heightListbox里显示的行数

scroll:是否显示滚动条;

returnExit: 如果box内按ENTER时,窗口将退出

width:设置Listbox的宽度;

showCursor:值为1Listbox内的当前条目会有光标闪

append(text, item): 增加一个选项Listbox末尾,item为选ID

Insert(text, item, before): before选项前添加,如beforeNone,则添加到开头

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是一个0total之间的数,

Entry(width,

text = "",

hidden = 0,

password = 0,

scroll = 1,

returnExit = 0)

输入框

width:输入文本的大小;

text:输入框的初始文本;

hidden:是否隐藏text

password:输入text是否未密码,如果是密码,将显示*

scrollscroll=1,则当文本太长不足以显示的时候,用户可以水平滚

value():返回Entry里当前的文

set(text): 设置当前要显示的文本为text

setFlags(flag, sense): Checkbox的成员setFlag

RadioBar(screen,

buttonlist)

用来创建SingleRadioButton

buttonlisttuple组成list,每tuple有三个元素,第一个SingleRadioButton显示的名称,第二个是SingleRadioButton被选时的返回对象,第三011代表默认选中

add(title, value, default = None):添加一个新SingleRadioButtonRadio 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):添加Checkboxtree的末尾,其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-8from snack import SnackScreen, ButtonChoiceWindowscreen = 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-8from 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-8from 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-8from 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.htmlhttp://www.ibm.com/developerworks/cn/linux/guitoolkit/newt/index.html
(2)若有建议,请留言,在此先感谢!

2 0
原创粉丝点击