python在linux制作圖形界面(snack)

jvkefxingbt 7年前發布 | 19K 次閱讀 Python Linux Python開發

snack是一個用于在linux制作圖形界面(GUI)的模塊,該模塊由c編寫,而且redhat的系統都自帶這個模塊。

1.獲取模塊

雖然redhat系統會自帶這個模塊,但是直接去import snack會提示找不到模塊,一個原因是我們重裝了系統的python,所以如果直接import不能找到模塊,可以通過find命令查找

find / -namesnack.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 snackimport *
 
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”

定義回調的方法

defprint_hello():
    print 'hello'

在展示界面的語句即 screen.popWindow()后面加入回調方法的設置

btn1.setCallback(print_hello())

4.有了回調方法,我們就可以實現多頁面的跳轉了

在上面的demo的基礎上,新增加一個window2的頁面,有一個label,entry(文本輸入框)和按鈕,點擊按鈕后,屏幕輸出文本框輸入的內容。

#encoding=utf-8
__author__ = 'kevinlu1010@qq.com'
 
importtraceback
fromsnackimport *
 
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

輸入文字,點擊按鈕,顯示信息

參考:

http://www.wanware.com/tsgdocs/snack.html

http://pydoc.org/1.5.2/snack.html

 

來自:http://python.jobbole.com/87119/

 

 本文由用戶 jvkefxingbt 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!