TkinterTk GUI工具包的Python繫結包。它是Tk GUI工具包的標準Python介面[3],並且是Python的業界標準GUI工具包。[4]Tkinter同時也包含在Python的Linux、Microsoft Windows和Mac OS X標準庫中。Tkinter的名字來自Tk interface。

Tkinter
開發者Fredrik Lundh[1]
程式語言Python
作業系統跨平台
特許條款Python特許條款[2]
網站docs.python.org/3/library/tkinter.html

描述

和大多數現代Tk繫結包一樣,Tkinter是透過嵌入在Python直譯器中的完整Tcl直譯器來包裝Python實現的。Tkinter的呼叫被翻譯成Tcl命令,這些命令被提供給這個嵌入式直譯器,從而使得在單個程式中可混合Python和Tcl。

它也有幾種流行的GUI庫可用作替代,例如wxPythonPyQtPySidePygamePygletPyGTK

定義

窗口

該詞在不同的文中具有不同的含義,通常指用戶顯示器上的某處矩形區域。

頂層窗口

指主窗口的子窗口。它將以桌面環境的標準框架和控制項裝飾。它可以在桌面上移動,通常也可以調整大小。

小工具

指圖形化使用者介面中構成應用程式的任何構建塊。

  • 核心小部件:容器:框架、標籤框架、頂層、窗格窗口。按鈕:按鈕、無線電鈕、核取按鈕(核取方塊)和選單按鈕。文字小部件:標籤、訊息、文字。條目小部件:縮放、捲軸、列表框、滾軸、旋轉框、條目(單行)、選項選單、文字(多行)和畫布(向量和像素圖形)。
  • 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指令英語Interpreter directive,允許在自執行時選擇合適的直譯器。[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行:啟動程式的主迴圈,監聽滑鼠和鍵盤事件。

參考資料

  1. ^ Shipman, John W., Tkinter reference: a GUI for Python, New Mexico Tech Computer Center, 2010-12-12 [2012-01-11], (原始內容存檔於2014-07-03) 
  2. ^ Archived copy. [2013-11-13]. (原始內容存檔於2013-11-13). 
  3. ^ Tkinter — Python interface to Tcl/Tk — Python v2.6.1 documentation. [2009-03-12]. (原始內容存檔於2012-10-18). 
  4. ^ Tkinter - Pythoninfo Wiki. [2021-06-25]. (原始內容存檔於2020-06-16). 
  5. ^ Python issue #2983, "Ttk support for Tkinter". [2021-06-25]. (原始內容存檔於2010-04-19). 
  6. ^ Python subversion revision 69051, which resolves issue #2983 by adding the ttk module. 
  7. ^ Tkinter 8.5 reference: a GUI for Python. [2021-06-25]. (原始內容存檔於2016-12-04). 
  8. ^ Fleck, Dan. Tkinter – GUIs in Python (PDF). CS112. George Mason University. [18 August 2018]. (原始內容 (PDF)存檔於2020-08-09). 
  9. ^ Klein, Bernd. GUI Programming with Python: Events and Binds. www.python-course.eu. [18 August 2018]. (原始內容存檔於2021-07-20). 
  10. ^ PEP 397 — Python launcher for Windows — Python.org. [2017-06-07]. (原始內容存檔於2021-06-29). 

外部連結