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平 ...
随机推荐
- (function(){}).call(window) 严格模式匿名函数的this指向undefined
上次在群里,看到有人发出 (function(){}).call(window) 这么一段代码,问这有什么意义,匿名函数中的this不是始终都指向window的么,为什么还要call,我当时也很疑惑. ...
- [010]转+修正---C++的贪吃蛇程序(未用面向对象封装)
在网上看到一段贪吃蛇程序,自己心痒下了下来又稍微做了一点修改. 没有用面向对象的方式来进行封装,下次准备试试. 需要在windows环境下进行编译 #include<iostream> # ...
- JavaScript笔记 第十六章 匿名函数和闭包
1.匿名函数 2.闭包 匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数. 一.匿名函数 //普通函数 function getName() { return 'name'; } a ...
- 写JQuery插件的基本知识
普及JQuery知识 知识1:用JQuery写插件时,最核心的方法有如下两个: 复制代码 代码如下: $.extend(object) 可以理解为JQuery 添加一个静态方法. $.fn.exten ...
- How to allow/block PING on Linux server – IPTables rules for icmp---reference
BY ADMIN - APRIL, 9TH 2014 The ‘PING’, it’s a command-line tool to check a host is reachable or not. ...
- 深入理解计算机系统第二版习题解答CSAPP 2.19
在2.17的基础上完成下表: x 十六进制 T2U(x) -8 0x8 -3 0xD -2 0xE -1 0xF 0 0x0 5 0x5
- Linux下root密码忘记的解决办法
{启动方式} ========================================================================== 一. lilo 1. 在出现 lil ...
- [原创]HTML标签总结!! 第一次画 尚需要改进 多关照
HTML 页面标签总结 拿xMind写了一下午总结的 只能传图片了 CSS明天整理 后天看看能不能传上来 //======================================= ...
- JavaGUI实现点名系统
有一个名字数组,根据线程知识是框中的数据依次修改 package Week1008; import java.awt.Font; import java.awt.event.ActionEvent; ...
- Submine Text 3 代码自动换行
开启自动换行功能的步骤: 1.打开 Preferences -> Setting - User(设置 - 用户) 2.在再大的括号前添加如下内容即可: "word_wrap" ...