• 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

  • 相关阅读:
    COM组件开发实践(七)---多线程ActiveX控件和自动调整ActiveX控件大小(上)
    A Complete ActiveX Web Control Tutorial
    C++使用VARIANT实现二维数组的操作
    用户自定义结构数据与VARIANT转换
    VS2008中使用JSONCPP方法小结
    HDOJ 2030 汉字统计
    HDOJ 1312 (POJ 1979) Red and Black
    POJ 1503 Integer Inquiry 简单大数相加
    POJ 1936 All in All
    枚举法
  • 原文地址:https://www.cnblogs.com/Xjng/p/3869869.html
Copyright © 2020-2023  润新知