python在linux制作图形界面(snack)
snack是一个用于在linux制作图形界面(GUI)的模块,该模块由c编写,而且redhat的系统都自带这个模块。
1.获取模块
虽然redhat系统会自带这个模块,但是直接去import snack会提示找不到模块,一个原因是我们重装了系统的python,所以如果直接import不能找到模块,可以通过find命令查找
find / -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.一个snack的demo
#encoding=utf-8
__author__ = 'kevinlu1010@qq.com' import traceback
from snack import * screen = SnackScreen() #实例化一个snack界面 def window():
btn1 = Button('按钮1') #实例化一个按钮组件
btn2 = Button('按钮2') #实例化一个按钮组件
g = Grid(2, 1) #实例化一个两列,一行的网格
g.setField(btn1, 0, 0) #把组件填充到网格中
g.setField(btn2, 1, 0)
screen.gridWrappedWindow(g, "我的界面")
f = Form() #实例化一个form
f.add(g) #把网格填充到form
result = f.run()
screen.popWindow() def main():
try:
window()
except:
print traceback.format_exc()
finally:
screen.finish() #关闭snack界面
return '' main()
实例化一个SnackScreen后,程序结束时,一定要调用finish,不然终端就会一直显示蓝色的页面,而且该终端已经不可以用了。所以在调试的时候,最好用try,finally的形式,确保程序出错也会执行finish方法。
一个snack页面主要有三种对象组成,一种是组件,例如这里的Button,可以查看snack.py查看到所以可用的组件和方法,可用的组件有Button,Label,Text,Textbox,Checkbox等,第二种是网格,网格主要用于布局,网格里面可以嵌套网格,实现复杂的界面布局。第三种就是form,所有要展示的东西都要放在form里面。
这个demo的界面:

3.回调方法
每一个组件都有一个回调方法的接口,我们可以设置组件的回调方法,来相应用户的操作。
例如上面的demo,我们希望在用户按下按钮1时打印一个"hello"
定义回调的方法
def print_hello():
print 'hello'
在展示界面的语句即 screen.popWindow()后面加入回调方法的设置
btn1.setCallback(print_hello())
4.有了回调方法,我们就可以实现多页面的跳转了
在上面的demo的基础上,新增加一个window2的页面,有一个label,entry(文本输入框)和按钮,点击按钮后,屏幕输出文本框输入的内容。
#encoding=utf-8
__author__ = 'kevinlu1010@qq.com' import traceback
from snack import * screen = SnackScreen() def window1():
btn1 = Button('按钮1')
btn2 = Button('按钮2') #
g = Grid(2, 1)
g.setField(btn1, 0, 0)
g.setField(btn2, 1, 0)
screen.gridWrappedWindow(g, "我的界面1")
f = Form()
f.add(g)
result = f.run() screen.popWindow()
btn1.setCallback(window2()) #设置回调方法为界面2 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 main():
try:
window1()
except:
print traceback.format_exc()
finally:
screen.finish() #关闭snack界面
return '' main()
界面展示:
第一个界面:

点击按钮1后出现界面2

输入文字,点击按钮,显示信息

参考:http://www.wanware.com/tsgdocs/snack.html
http://pydoc.org/1.5.2/snack.html
python在linux制作图形界面(snack)的更多相关文章
- Python编写的桌面图形界面程序实现更新检测和下载安装
在Python中我们有很多种方案来编写桌面图形用户界面程序,譬如内置的 Tkinter .强大的 PyQt5 和 PySide2 ,还有 wxPython .借助这些或内置或第三方的模块,我们可以轻松 ...
- Linux 安装图形界面及远程连接
#可查询哪些组件是否已经安装(可用来对照组件名称) yum grouplist yum groupinstall 'X Window System' -y #安装GNOME桌面环境 yum group ...
- Linux:远程到linux的图形界面
一般linux都没有安装图形界面,可以通过VNC服务来实现步骤如下: 一.安装vnc server1.查看是否安装vncrpm -q vnc-serverpackage vnc is not inst ...
- unix/linux中图形界面那些事
我们知道unix/linux刚开始的时候是没有图形界面的,随着时代的发展,排版.制图.多媒体应用越来越普遍了,这些需求都需要用到图形界面(Graphical User Interface).为此,MI ...
- weblogic11g 安装——linux 无图形界面
weblogic11g 安装——linux下无weblogic安装图形界面 注意:此次安装,没做server.ip .系统规划 目的:学习weblogic11g 在linux下 无图形安装的过程 j ...
- kali Linux 文本图形界面切换遇到的怪问题
前段装了在Virtual Box上装一个Kali Linux玩,然后设为了开机进入文本界面,后来遇到无法上网的问题,网上找到解决方法,说是NAT地址转换和host-only双网卡顺序问题,按照网上的说 ...
- linux字符图形界面
/etc/inittab 1) 字符界面标识: id:3:initdefault: 2) 图形界面标识: id:5:initdefault: [root@ora9i ~]# vi /etc/i ...
- Linux中图形界面和文本模式相互切换
1.默认开机进入文本模式 如果想让开机自动进纯文本模式, 修改/etc/inittab 找到其中的 id:5:initdefault: 这行指示启动时的运行级是5,也就是图形模式 改成3就是文本模式了 ...
- widows本地-xshell实现远程连接linux服务器图形界面
本地环境远程连接linux图形界面,常用的实现工具有,VNC.Puty.Xshell等,这里我们用的xshell manager: Xmanager简介:Xmanager是一个运行于 Windows平 ...
随机推荐
- 【面试题】如何让C语言自动发现泄漏的内存
1. 题目 改造malloc和free函数,使C语言能自动发现泄漏的内存,在程序退出时打印中遗漏的内存地址和大小. 2. 思路 用一个链表来记录已经分配的内存地址.在malloc时,把分配的内存地址和 ...
- 如何在 iOS 中解决循环引用的问题
稍有常识的人都知道在 iOS 开发时,我们经常会遇到循环引用的问题,比如两个强指针相互引用,但是这种简单的情况作为稍有经验的开发者都会轻松地查找出来. 但是遇到下面这样的情况,如果只看其实现代码,也很 ...
- Android 换肤功能的实现(Apk插件方式)
一.概述 由于Android 没有提供一套统一的换肤机制,我猜可能是因为国外更注重功能和体验的原因 所以国内如果要做一个漂亮的换肤方案,需要自己去实现. 目前换肤的方法大概有三种方案: (1)把皮肤资 ...
- About Webkit
http://blog.csdn.net/spacetiller/article/details/5784461 一 . WebKit 简介 Webkit 是一个开放源代码的浏览器引擎 (web br ...
- 深入理解计算机系统第二版习题解答CSAPP 2.17
假设w=4,我们能给每个可能的十六进制数字赋予一个数值,假设用一个无符号或者补码表示.完成下表: x 无符号(B2U(x)) 补码(B2T(x)) 十六进制 二进制 0xE 1110 14 -2 0x ...
- aggregation 详解2(metrics aggregations)
概述 权值聚合类型从需要聚合的文档中取一个值(value)来计算文档的相应权值(比如该值在这些文档中的max.sum等). 用于计算的值(value)可以是文档的字段(field),也可以是脚本(sc ...
- Elasticsearch aggregations API
聚合能力 Aggregation API 类似 SQL 中的 GROUP BY 语句,可以以某个字段来进行分组. Aggregation API 支持分级分组,多级的分组过程是由外到里的. Aggre ...
- 【转载】为什么不建议<=3G的情况下使用CMS GC
之前曾经有讲过在heap size<=3G的情况下完全不要考虑CMS GC,在heap size>3G的情况下也优先选择ParallelOldGC,而不是CMS GC,只有在暂停时间无法接 ...
- CentOS 7 gedit编辑器中文乱码解决方法
无需root登陆 打开终端输入如下命令: gsettings set org.gnome.gedit.preferences.encodings auto-detected "['GB180 ...
- C# String 前面不足位数补零的方法 PadLeft
PadLeft(int totalWidth, char paddingChar) //在字符串左边用 paddingChar 补足 totalWidth 长度PadLeft(int totalWid ...