Tkinter
Tkinter是Tk GUI工具包的Python繫結包。它是Tk GUI工具包的標準Python介面[3],並且是Python的業界標準GUI工具包。[4]Tkinter同時也包含在Python的Linux、Microsoft Windows和Mac OS X標準庫中。Tkinter的名字來自Tk interface。
開發者 | Fredrik Lundh[1] |
---|---|
程式語言 | Python |
作業系統 | 跨平台 |
授權條款 | Python授權條款[2] |
網站 | docs |
描述
和大多數現代Tk繫結包一樣,Tkinter是透過嵌入在Python直譯器中的完整Tcl直譯器來包裝Python實現的。Tkinter的呼叫被翻譯成Tcl命令,這些命令被提供給這個嵌入式直譯器,從而使得在單個程式中可混合Python和Tcl。
它也有幾種流行的GUI庫可用作替代,例如wxPython、PyQt、PySide、Pygame、Pyglet和PyGTK。
定義
該詞在不同的文中具有不同的含義,通常指使用者顯示器上的某處矩形區域。
頂層窗口
指主窗口的子窗口。它將以桌面環境的標準框架和控制項裝飾。它可以在桌面上移動,通常也可以調整大小。
小工具
指圖形化使用者介面中構成應用程式的任何構建塊。
- 核心小部件:容器:框架、標籤框架、頂層、窗格窗口。按鈕:按鈕、無線電鈕、核取按鈕(核取方塊)和選單按鈕。文字小部件:標籤、訊息、文字。條目小部件:縮放、捲軸、列表框、滾軸、旋轉框、條目(單行)、選項選單、文字(多行)和畫布(向量和像素圖形)。
- Tkinter 提供了三個允許顯示彈出對話方塊的模組:tk.messagebox(確認、資訊、警告和錯誤對話方塊)、tk.filedialog(單檔案、多檔案和目錄選擇對話方塊)和 tk.colorchooser(顏色選擇器)。
- Python 2.7和Python 3.1合併了Tk 8.5的「主題 Tk」(「ttk」)功能[5][6]。這使得Tk小部件可以輕鬆地主題化,使其看起來像執行應用程式的本機桌面環境,從而解決長期以來對Tk(以及因此對Tkinter)的批評。一些小部件是 ttk 獨有的,例如組合方塊、進度條和樹狀視圖小部件.
框架
在Tkinter中,Frame(框架)小部件是複雜布局的基本組織單位。框架是一個矩形區域,可以包含其他小部件。
父小部件和子小部件
建立任何小部件時,都會建立父子關係。例如,如果將文字標籤放置在框架內,則框架是標籤的父小部件。
小型應用程式
這是一個帶有小部件的小型Python 3 Tkinter應用程式:[7]
#!/usr/bin/env python3
from tkinter import *
root = Tk() # 创建根窗口
w = Label(root, text="Hello, world!") # 创建一个带有单词的标签
w.pack() # 把标签放进窗口中
root.mainloop() # 开始主循环
對於 Python 2,唯一的區別是import命令中的「tkinter」是大寫的「Tkinter (頁面存檔備份,存於網際網路檔案館)」。[8]
建立過程
建立小部件有四個步驟:[9]
建立
在框架內建立一個小部件。
組態
更改這個小部件的屬性。
打包
將它打包到指定的位置,使其可見。開發人員還可以選擇使用 .grid()(row=整數,column=整數)(定義行和列來定位小部件,預設為 0)或.place()(relx=整數或小數,rely=整數或小數)(定義框架或窗口中的坐標)。
繫結
將其繫結到函式或事件。
這些步驟通常被簡化,並且順序可能會不同。
簡單的程式
這是一個在 Python 中使用物件導向的簡單的程式(使用Tcl 8.6,但MacOS上的Python預設不使用它):
#!/usr/bin/env python3
import tkinter as tk
class Application(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.grid()
self.createWidgets()
def createWidgets(self):
self.mondialLabel = tk.Label(self, text='Hello World')
self.mondialLabel.config(bg="#00ffff")
self.mondialLabel.grid()
self.quitButton = tk.Button(self, text='Quit', command=self.quit)
self.quitButton.grid()
app = Application()
app.master.title('Sample application')
app.mainloop()
- 第1行:程式的Hashbang指令,允許在自執行時選擇合適的直譯器。[10]
- 第3行:將tkinter模組匯入程式的命名空間,但為其設定別名tk。
- 第6行:Application類繼承自Tkinter的Frame類。
- 第8行:定義設定Frame的函式。
- 第9行:呼叫父類別Frame的建構函式。
- 第13行:定義小部件。
- 第14行:建立一個名為MondialLabel的標籤,其文字為「Hello World」。
- 第15行:將MondialLabel的背景顏色設定為青色。
- 第16行:將標籤放置在Application上,使其使用grid()幾何管理器方法可見。
- 第17行:建立一個帶有文字「Quit」的按鈕。
- 第18行:將按鈕放置在應用程式上。grid、place和pack都是使小部件可見的方法。
- 第21行:主程式從這裡開始,建立Application類別的實例。
- 第22行:呼叫這個方法將窗口標題設定為「Sample application」。
- 第23行:啟動程式的主迴圈,監聽滑鼠和鍵盤事件。
參考資料
- ^ Shipman, John W., Tkinter reference: a GUI for Python, New Mexico Tech Computer Center, 2010-12-12 [2012-01-11], (原始內容存檔於2014-07-03)
- ^ Archived copy. [2013-11-13]. (原始內容存檔於2013-11-13).
- ^ Tkinter — Python interface to Tcl/Tk — Python v2.6.1 documentation. [2009-03-12]. (原始內容存檔於2012-10-18).
- ^ Tkinter - Pythoninfo Wiki. [2021-06-25]. (原始內容存檔於2020-06-16).
- ^ Python issue #2983, "Ttk support for Tkinter". [2021-06-25]. (原始內容存檔於2010-04-19).
- ^ Python subversion revision 69051, which resolves issue #2983 by adding the ttk module.
- ^ Tkinter 8.5 reference: a GUI for Python. [2021-06-25]. (原始內容存檔於2016-12-04).
- ^ Fleck, Dan. Tkinter – GUIs in Python (PDF). CS112. George Mason University. [18 August 2018]. (原始內容 (PDF)存檔於2020-08-09).
- ^ Klein, Bernd. GUI Programming with Python: Events and Binds. www.python-course.eu. [18 August 2018]. (原始內容存檔於2021-07-20).
- ^ PEP 397 — Python launcher for Windows — Python.org. [2017-06-07]. (原始內容存檔於2021-06-29).
外部連結
- TkInter, Python Wiki, [2021-06-25], (原始內容存檔於2020-06-16)
- Tkinter GUI Tutorial (頁面存檔備份,存於網際網路檔案館):分別涵蓋每個小部件。
- Lundh, Fredrik, An Introduction to Tkinter, 1999 [2021-06-25], (原始內容存檔於2012-10-19)
- TkDocs (頁面存檔備份,存於網際網路檔案館):包括Python資訊和教程
- Ferg, Stephen, Thinking in Tkinter, [2022-05-18], (原始內容存檔於2021-03-07)