太實用了!自己動手寫軟體——GUI程式設計
這幾天我有一個想法就是將我之前做測試寫的一些協議指令碼(如:ssh、FTP、SMTP、MySQL、Oracle等)綜合在一起做一個密碼PJ器,這麼多的協議放在一起,每個協議都有自己特殊的引數,如果還是和之前我們的方式一起通過命令列輸入的方式未免就太麻煩了。但是如果提供一個軟體介面,將不同的協議作為選擇項,不同協議需要不同的引數,這樣一個相對方便的密碼PJ軟體是不是就好了呢。
出於這樣的考慮,今天我們看一下圖形使用者介面(Graphical User Interface,GUI)程式設計,看了一下網上python的GUI編碼庫有很多,但是tkinter是內建庫,所以我們還是選擇這個內建庫作為我們的工具物件了。我們今天就來學習一下tkinter的使用。後面幾天我們也將持續更新我們密碼PJ工具的完成過程,有興趣的小夥伴可以和菜鳥小白一起每天完成一部分內容,最終自己完成一個軟體的編寫。
GUI編碼流程
將你的GUI程式啟動和執行起來一般需要以下五個步驟:
-
匯入模組,我們使用的就是import tkinter(或者from tkinter import *)
-
建立一個頂層視窗,用於放置所有的元件
-
在頂層視窗的上面構建不同的GUI元件
-
通過底層的應用程式碼將這些GUI元件連線起來
-
進入主事件迴圈
安裝和使用
好了,迴歸正題,看看我們今天需要學習的tkinter,因為是內建庫,所以我們不需要安裝直接呼叫即可。
python3對tkinter庫進行了改寫,兩者的匯入方式存在差異
python2匯入:
import Tkinter
python3匯入:
import tkinter
視窗
我們使用GUI程式設計,都需要新建一個頂層框架,就好像是畫家在畫畫,我們先要拿出一張紙來承載畫家的繪畫內容。我們新建的這個頂層框架也是一樣,用來盛放所有的GUI元件(如:按鈕(Button)、文字輸入框(Entry)、選單(Menu))。我們新建的方式一般是這樣的。
import tkinter
window = tkinter.Tk()#建立一個主視窗
控制元件
當前tkinter一共有這麼幾種控制元件,我們先看看每一個控制元件的型別,然後我們再抽一些常用的控制元件來寫一些示例
控制元件 | 描述 |
---|---|
Button | 按鈕控制元件;在程式中顯示按鈕,包含的事件如:滑鼠懸浮、按下、釋放以及鍵盤活動 |
Canvas | 畫布控制元件;顯示圖形元素,如線條、橢圓、矩形等 |
Checkbutton | 多選框控制元件;用於在程式中提供多項選擇框 |
Entry | 輸入控制元件;用於顯示簡單的文字內容 |
Frame | 框架控制元件;在螢幕上顯示一個矩形區域,多用來作為容器 |
Label | 標籤控制元件;可以顯示文字和點陣圖 |
Listbox | 列表框控制元件;在Listbox視窗小部件是用來顯示一個字串列表給使用者 |
Menubutton | 選單按鈕控制元件,用於顯示選單項。 |
Menu | 選單控制元件;顯示選單欄,下拉選單和彈出選單 |
Message | 訊息控制元件;用來顯示多行文字,與label比較類似 |
Radiobutton | 單選按鈕控制元件;顯示一個單選的按鈕狀態 |
Scale | 範圍控制元件;顯示一個數值刻度,為輸出限定範圍的數字區間 |
Scrollbar | 滾動條控制元件,當內容超過視覺化區域時使用,如列表框。. |
Text | 文字控制元件;用於顯示多行文字 |
Toplevel | 容器控制元件;用來提供一個單獨的對話方塊,和Frame比較類似 |
Spinbox | 輸入控制元件;與Entry類似,但是可以指定輸入範圍值 |
PanedWindow | PanedWindow是一個窗口布局管理的外掛,可以包含一個或者多個子控制元件。 |
LabelFrame | labelframe 是一個簡單的容器控制元件。常用與複雜的窗口布局。 |
tkMessageBox | 用於顯示你應用程式的訊息框。 |
Button控制元件
我們新建一個退出按鈕,程式碼如下:
import tkinter
window = tkinter.Tk()#建立一個主視窗
window.title("密碼PJ工具")#視窗標題
window.geometry("500x600")
quit = tkinter.Button(window,text="QUIT",command=window.quit())
quit.pack()
window.mainloop()
-
首先我們匯入tkinter模組
-
然後新建一個頂層視窗
-
五六行是定義頂層視窗的標題和大小
-
第八行是我們編寫的Button控制元件,將其放置在window頂層框架上,顯示的Button文字為“QUIT”,綁定了一個回撥函式就是window.quit
-
第九行就是將這個button控制元件採用pack方法放置,pack會將控制元件自動放置在合適的位置
-
最後一行執行一個主函式
實現出來效果是這樣的
image
Label控制元件Label控制元件就相當於一個資訊提供框。具體使用方法如下:
import tkinter
window = tkinter.Tk()#建立一個主視窗
window.title("密碼PJ工具")#視窗標題
window.geometry("500x600")
label = tkinter.Label(window,text="菜鳥小白的學習分享")
label.pack()
window.mainloop()
其它部分都是和Button內容是一致的,就是Label控制元件呼叫的Label函式,它沒有回撥函式,所以說它只是相當於一個資訊提供框。
實現效果是這樣的
image
Menu控制元件
Menu控制元件就是我們說的選單欄,後面我們編寫軟體也是需要用到的。具體使用方法如下:
import tkinter
window = tkinter.Tk()#建立一個主視窗
window.title("密碼PJ工具")#視窗標題
window.geometry("500x600")
menu = tkinter.Menu(window)
menu.add_command(label="開始PJ",command=print("開始PJ"))
menu.add_command(label="退出",command=window.quit)
window.config(menu=menu)
window.mainloop()
- 1-6行:和之前的一樣,不做介紹
- 8行:建立一個Menu控制元件,並將控制元件放置在window上
- 9-10行:新增選單內容和回撥函式
- 11行:將menu控制元件配置生效在window頂層框架上
-
13行:進入主事件迴圈
最終實現效果是這樣的
好了,今天的內容就先聊到這裡吧,有什麼疑問可以在公眾號新增菜鳥小白的微信,我們相互討論。