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'

importtracebackfrom snack import *screen= SnackScreen() #实例化一个snack界面

defwindow():

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()defmain():try:

window()except:printtraceback.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"

定义回调的方法

defprint_hello():print 'hello'

在展示界面的语句即 screen.popWindow()后面加入回调方法的设置

btn1.setCallback(print_hello())

4.有了回调方法,我们就可以实现多页面的跳转了

在上面的demo的基础上,新增加一个window2的页面,有一个label,entry(文本输入框)和按钮,点击按钮后,屏幕输出文本框输入的内容。

#encoding=utf-8

__author__ = 'kevinlu1010@qq.com'

importtracebackfrom snack import *screen=SnackScreen()defwindow1():

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

defwindow2():defprint_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()))defmain():try:

window1()except:printtraceback.format_exc()finally:

screen.finish()#关闭snack界面

return ''main()

界面展示:

第一个界面:

点击按钮1后出现界面2

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

linux python 图形界面开发_python在linux制作图形界面(snack)相关推荐

  1. 嵌入式linux界面开发,基于嵌入式Linux平台实现GUI系统的设计方案

    描述 嵌入式图形用户界面( GUI, Graphic UserInterface)系统作为嵌入式系统中的一大关键技术,为用户提供设备的控制接口,其性能的好坏,界面的美观程度,影响着用户对产品的购买意愿 ...

  2. python 关闭窗口事件_python在Linux平台下捕获窗体关闭事件

    Python 在建立界面模块的时候可能会出现,界面的窗体上的关闭按钮按下,界面退出后,但是再次启动的时候无法启动界面, 因为界面这个时候相当于做了隐藏,类似于Qt中的Held. 解决这样的问题.一般有 ...

  3. python 黑客工具开发_python黑客软件的搜索结果-阿里云开发者社区

    带你读<Python科学计算(原书第2版)>之一:导论 计算机科学丛书点击查看第二章点击查看第三章Python科学计算(原书第2版)Python for Scientists, Secon ...

  4. Python量化交易平台开发教程系列7-顶层GUI界面开发(1)

    原创文章,转载请注明出处:用Python的交易员 前言 终于有时间来写第一篇顶层GUI界面开发相关的教程了,之前实在是事情太多,跟各位读者抱个歉. 整合底层接口的各项功能到中层引擎中后,当我们开发顶层 ...

  5. python音视频开发_Python音视频开发:消除抖音短视频Logo的图形化工具实现

    一.引言 在<Python音视频开发:消除抖音短视频Logo和去电视台标的实现详解>节介绍了怎么通过Python+Moviepy+OpenCV实现消除视频Logo的四种方法,并提供了详细的 ...

  6. ROS Qt5 librviz人机交互界面开发四(添加rviz显示界面)

    本系列教程文章专栏: ROS机器人GUI程序开发 本系列课程已上线古月学院,欢迎感兴趣的小伙伴订阅: ROS Qt开发环境搭建以及基础知识介绍 ROS人机交互软件的界面开发 ROS Rviz组件开发方 ...

  7. python实现linux命令输出两列_Python实现Linux命令xxd -i功能

    def Xxdi(): #解析命令行选项及参数 ([base, cols, strip], [inFile, outFile]) = ParseOption() import os if os.pat ...

  8. python读取进程内存_Python读取Linux内存进程错误(/ proc / $pid / mem...

    我已经在某些Linux发行版(Debian,Linux Mint -)上测试了以下代码,并且可以正常工作,但是在CentOS下,即使我以root身份运行,也会出现错误: #!/usr/bin/env ...

  9. python连接linux服务器读取txt文件_python 读取Linux服务器上的文件方法

    使用Python语句,读取Linux远端服务器上的文件打印到控制台的代码实现: 下载包:paramiko import paramiko #服务器信息,主机名(IP地址).端口号.用户名及密码 hos ...

最新文章

  1. php+羊,PHP之羊生小羊的问题
  2. Java中程序初始化的顺序
  3. egg.js连接mysql数据库遇到的问题
  4. MiguelCatalan/MaterialSearchView
  5. java注释详解--javadoc注释
  6. aop切面排除某个类_AOP 你看这一篇就够了
  7. json mysql 字段 默认值_MySQL中的JSON类型
  8. php数组为什么其他语言,PHP语言特性和各版本的差异
  9. ssl初一组周六模拟赛【2018.4.21】
  10. mysql死锁无法查询_MySQL死锁导致无法查询
  11. 免费制作微信小程序开发关于旅游_教大家怎么一步步免费自己做微信小程序
  12. jsp 运用 session 登录输出
  13. “OSPF” 开销值、协议优先级及计时器的修改
  14. java中Action层、Service层和Dao层的功能区分
  15. 《为自己工作——世界顶级设计师成功法则》—第1章1.2节有同情心
  16. iPhone手机微信下载的文档传输到win10系统桌面
  17. SVM-sklearn
  18. 如何利用MATLAB做非线性一元回归,Matlab一元非线性回归分析
  19. Pycharm 教育版下载/安装 无需注册破解
  20. MP地面站二次开发教程(二)MP的框架与修改

热门文章

  1. 用python解决生活问题_Python解决生活问题之闹钟程序的实现
  2. python re 匹配多行_Python正则表达式,看这一篇就够了
  3. 记事本linux命令换行符,Windows 10版记事本应用终于支持Linux/Mac换行符 排版不再辣眼睛...
  4. postek二次开发_20190626_二次开发BarTender打印机_C#代码_一边读取TID_一边打印_打印机POSTEK...
  5. linux怎么安装32电脑上,linux – 如何在Ubuntu上安装mingw32?
  6. 别再双塔了!谷歌提出DSI索引,检索效果吊打双塔,零样本超BM25!
  7. Transformer太大了,我要把它微调成RNN
  8. Step-by-step to LSTM: 解析LSTM神经网络设计原理
  9. 不要再纠结卷积的公式啦!0公式深度解析全连接前馈网络与卷积神经网络!
  10. 论文浅尝 | 嵌入常识知识的注意力 LSTM 模型用于特定目标的基于侧面的情感分析...