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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM