這幾天我有一個想法就是將我之前做測試寫的一些協議腳本(如: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函數,它沒有回調函數,所以說它只是相當於一個信息提供框。
實現效果是這樣的

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行:進入主事件循環
最終實現效果是這樣的
好了,今天的內容就先聊到這里吧,有什么疑問可以在公眾號添加菜鳥小白的微信,我們相互討論。