Categories: Python

Python tkinter 視窗程式設計教學:Hello World

介紹如何在 Python 中使用 tkinter 模組,開發具有圖形介面(GUI)的視窗程式。

tkinter(代表 Tk interface)是 Python 中最基本的 Tk 圖形化工具標準模組,在多數的 UNIX/Linux、Mac OS 以及 Windows 系統都可以使用。

檢查 tkinter 環境

若要確認自己的 Python 中是否有安裝好 tkinter 模組,可以在系統的命令列中執行 python 並引入 tkinter 模組,若 tkinter 有安裝好的話,就會出現一個簡單的 Tk 示範視窗,並且顯示 tkinter 的版本:

# 測試 Python 的 tkinter 模組
python -m tkinter
tkinter 示範視窗

Hello World

以下是一個以 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 函數運行視窗程式,執行之後就會顯示一個這樣的視窗:

Hello World 視窗

按鈕(Button)

如果要在 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)

如果要在視窗中加入文字,可以使用 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)

若要讓使用者輸入文字資料,可以運用 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 Tkrunoob.comTutorialsTeacherTechBridge 技術共筆部落格

Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

1 年 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

1 年 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

1 年 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

1 年 ago