介紹如何在 Python 中使用 tkinter
模組,開發具有圖形介面(GUI)的視窗程式。
tkinter(代表 Tk interface)是 Python 中最基本的 Tk 圖形化工具標準模組,在多數的 UNIX/Linux、Mac OS 以及 Windows 系統都可以使用。
若要確認自己的 Python 中是否有安裝好 tkinter
模組,可以在系統的命令列中執行 python
並引入 tkinter
模組,若 tkinter
有安裝好的話,就會出現一個簡單的 Tk 示範視窗,並且顯示 tkinter
的版本:
# 測試 Python 的 tkinter 模組 python -m tkinter
以下是一個以 tkinter
建立視窗的 hello world 範例程式:
# 引入 tkinter 模組 import tkinter as tk # 建立主視窗 Frame window = tk.Tk() # 設定視窗標題 window.title('Hello World') # 設定視窗大小為 300x100,視窗(左上角)在螢幕上的座標位置為 (250, 150) window.geometry("300x100+250+150") # 執行主程式 window.mainloop()
在這裡我們以 tk.Tk
函數建立應用程式的主視窗,接著設定各種視窗的屬性,最後呼叫 mainloop
函數運行視窗程式,執行之後就會顯示一個這樣的視窗:
如果要在 tkinter
的視窗程式中加入按鈕,可以使用 Button
這個元件,以下是使用範例:
import tkinter as tk # 自訂函數 def hello(): print("Hello, world.") window = tk.Tk() window.title('Hello World') window.geometry("300x100+250+150") # 建立按鈕 button = tk.Button(window, # 按鈕所在視窗 text = 'Hello', # 顯示文字 command = hello) # 按下按鈕所執行的函數 # 以預設方式排版按鈕 button.pack() window.mainloop()
在建立 Tk 視窗的各種元件時,都會需要指定其父元件,以此例來說,我們要將按鈕放在主視窗之中,所以就將按鈕的父元件指定為 window
。建立好按鈕之後,還必須呼叫排版相關的函數(pack
),才會將元件真正放入父元件之中。
使用 Button
時除了以 text
參數設定顯示文字之外,最重要的就是要使用 command
參數指定按下按鈕時所要呼叫的函數,這裡我們將呼叫函數指定為自己定義的 hello
函數,因此當按下該按鈕時,就會自動執行 hello
函數的內容,在命令列輸出一些訊息。
這是命令列輸出的訊息,如果希望以跳出訊息視窗的方式顯示訊息,可以使用下方介紹的訊息視窗。
如果要在視窗中加入文字,可以使用 Label
這個元件,以下是使用範例:
import tkinter as tk window = tk.Tk() window.title('Hello World') window.geometry("300x100+250+150") # 標示文字 label = tk.Label(window, # 文字標示所在視窗 text = 'Hello, world') # 顯示文字 # 以預設方式排版標示文字 label.pack() window.mainloop()
如果需要更改文字的字型、大小與顏色等屬性,只要調整對應的參數即可:
import tkinter as tk window = tk.Tk() window.title('Hello World') window.geometry("300x100+250+150") # 標示文字 label = tk.Label(window, # 文字標示所在視窗 text = 'Hello, world', # 顯示文字 bg = '#EEBB00', # 背景顏色 font = ('Arial', 12), # 字型與大小 width = 15, height = 2) # 文字標示尺寸 # 以預設方式排版標示文字 label.pack() window.mainloop()
若要讓使用者輸入文字資料,可以運用 Entry
元件,以下是使用範例:
import tkinter as tk def onOK(): # 取得輸入文字 print("Hello, {}.".format(entry.get())) window = tk.Tk() window.title('Hello World') window.geometry("300x100+250+150") # 標示文字 label = tk.Label(window, text = '姓名') label.pack() # 輸入欄位 entry = tk.Entry(window, # 輸入欄位所在視窗 width = 20) # 輸入欄位的寬度 entry.pack() # 按鈕 button = tk.Button(window, text = "OK", command = onOK) button.pack() window.mainloop()
使用在 Entry
元件中輸入的文字,在程式中可以透過其 get
函數來取得。
如果希望以跳出的視窗來顯示訊息文字,可以使用 tkinter.messagebox
這個模組,以下是使用範例:
import tkinter as tk # 引入訊息視窗模組 import tkinter.messagebox def onOK(): msg = "Hello, {}.".format(entry.get()) tkinter.messagebox.showinfo(title = 'Hello', # 視窗標題 message = msg) # 訊息內容 window = tk.Tk() window.title('Hello World') window.geometry("300x100+250+150") # 標示文字 label = tk.Label(window, text = '姓名') label.pack() # 輸入欄位 entry = tk.Entry(window, width = 20) entry.pack() # 按鈕 button = tk.Button(window, text = "OK", command = onOK) button.pack() window.mainloop()
這個例子中,我們將之前的 print
函數替換為 tkinter.messagebox
,將原本從命令列輸出的訊息,改以跳出的訊息視窗來顯示。當按下按鈕之後,就會跳出一個這樣的訊息視窗:
參考資料:Python Tk、runoob.com、TutorialsTeacher、TechBridge 技術共筆部落格