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

来源:互联网 发布:原生js 实现swipe效果 编辑:程序博客网 时间:2024/06/05 06:59

一、简介

       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)代码:
[html] view plain copy
  1. #encoding=utf-8  
  2. import traceback  
  3. from snack import *  
  4.   
  5. screen = SnackScreen()    
  6.   
  7. def window1():  
  8.     btn2 = Button('按钮1')    
  9.     btn3 = Button('按钮2')  
  10.     g = Grid(2, 1)     
  11.     g.setField(btn2, 0, 0)    
  12.     g.setField(btn3, 1, 0)  
  13.     screen.gridWrappedWindow(g, "我的界面1")  
  14.     f = Form()   
  15.     f.add(g)    
  16.     result = f.run()  
  17.     screen.popWindow()  
  18.     #btn2.setCallback(window2())  #设置回调方法为界面2  
  19.     #btn3.setCallback(leave())  #设置回调方法为离开    
  20.     if result == btn2:  
  21.         btn2.setCallback(window2())  #设置回调方法为界面2  
  22.     else:  
  23.         btn3.setCallback(leave())  #设置回调方法为离开  
  24.       
  25. def window2():  
  26.     def print_name(name):  
  27.         print '你的名称是:%s' % name  
  28.   
  29.     label = Label('请输入名称:')    
  30.     entry = Entry(10, '')    
  31.     btn1 = Button('确定')   
  32.     g = Grid(2, 2)     
  33.     g.setField(label, 0, 0)    
  34.     g.setField(entry, 1, 0)  
  35.     g.setField(btn1, 1, 1)  
  36.     screen.gridWrappedWindow(g, "我的界面2")  
  37.     f = Form()  #实例化一个form  
  38.     f.add(g)    #把网格填充到form  
  39.     result = f.run()  
  40.     screen.popWindow()  
  41.     btn1.setCallback(print_name(entry.value()))  
  42.   
  43. def leave():  
  44.     print 'leave'  
  45.     return ''  
  46.   
  47. def main():  
  48.     try:  
  49.         window1()  
  50.     except:  
  51.         print traceback.format_exc()  
  52.     finally:  
  53.         screen.finish()  #关闭snack界面  
  54.         return ''  
  55.   
  56. 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:
[html] view plain copy
  1. #encoding=utf-8  
  2. from snack import SnackScreen, ButtonChoiceWindow  
  3. screen = SnackScreen()  
  4. ButtonChoiceWindow(screen, 'Fatal Error',  
  5.                    'You do not have enough RAM to install on this machine.\n'  
  6.                    '\n'  
  7.                    'Press <return> to reboot your system.\n', )  
  8.                    #buttons = ("OK",))  
  9. screen.finish()  

或:
[html] view plain copy
  1. #encoding=utf-8  
  2. from snack import *  
  3. screen = SnackScreen()  
  4. ButtonChoiceWindow(screen, title="ButtonChoiceWindowDemo",  text"text:choice"buttons = ['Ok','Cancel'],   
  5.                    width = 40x = Noney = Nonehelp = None)  
  6. screen.finish()  

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

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