1. 程式人生 > 其它 >python自帶gui外掛tkinter使用小結

python自帶gui外掛tkinter使用小結

1.tkinter簡介

Tkinter(即 tk interface,簡稱“Tk”)本質上是對 Tcl/Tk 軟體包的 Python 介面封裝,它是 Python 官方推薦的 GUI 工具包,屬於 Python 自帶的標準庫模組,當您安裝好 Python 後,就可以直接使用它,而無須另行安裝。

作為一款 Python GUI 工具,Tkinter 擁有良好的跨平臺性,支援 Windows、Linux、Mac 平臺,它傳承了 Python 語法簡潔、程式碼易讀的基本特點。

與其他程式語言的 GUI 工具包相比,Tkinter 編碼效率高,能夠實現快速開發的目的,非常適合初學者學習。Tkinter 使用純 Python 語言開發,與 C/C++ 開發的 Qt 框架相比,Tkinter 有自身的侷限性,比如效能、功能豐富程度等都不及 Qt,因此它只適合開發一些簡單的程式,比如計算器的介面
引用自

tkinter簡介

2.常用元件方法

tkinter使用

3.補充

3.1.檔案、資料夾選擇框

一般而言,將檔案選擇或資料夾選擇繫結在一個按鈕上
檔案選擇

import filedialog
def choose_directory():
    virtual_file_path = tkinter.filedialog.askopenfilename(title=u'選擇檔案')
    pass
tk.Button(frame, text="選擇檔案", command=choose_directory).grid(row=3, column=4)

資料夾選擇

def choose_directory():
	file_path = tk.filedialog.askdirectory(title=u'選擇資料夾')
tk.Button(frame, text="選擇資料夾", command=choose_directory).grid(row=2, column=4)

3.2.佈局方法及佈局控制元件的選擇

建議在使用時儘可能的使用佈局控制元件,例如frame等,然後在佈局控制元件中使用佈局方法,方便進行佈局的控制

3.3. 控制元件的variable/textvariable

大部分控制元件都有variable/textvariable屬性,此屬性相當於將值繫結到對應的變數上,一般為StringVar,也可以作為設定預設值使用,不同控制元件可以繫結同一個變數

3.4.Entry/Spinbox控制元件的validate、validatecommand、invalidcommand方法

validate:校驗的邏輯:包含 "none", "focus", "focusin", "focusout", "key", "all",一般使用key即可,預設為None,不校驗
validatecommand:當校驗開啟時,觸發的方法,必須返回True或者False
invalidcommand:當validatecommand方法返回False時觸發此方法
使用例項

def rule(val):
        return val.isdigit() or val == ""
def incorrect():
    logger.error("memory enter not digit")
# 需要手動註冊校驗規則
validate = (window.register(rule), "%P")
spinBox = tk.Spinbox(frame, from_=0,to=100, validate="key", validatecommand=validate, invalidcommand=incorrect)

3.5.子視窗建立及防止重複點選,重複出現

此處以選單建立子視窗為例

def about():
	# 當開啟子視窗時禁用後方的主視窗,達到防止重複點選的效果
	window.attributes("-disabled", True)
	about_window = Toplevel(window)
	about_window.title("關於")
	about_window.resizable(0, 0)
	about_window.focus()
	about_window.geometry(f'{int(WIDTH/4)}x{int(HEIGHT/4)}+{int((window.winfo_screenwidth() - (WIDTH / 4))/2)}+{int((window.winfo_screenheight() - (HEIGHT / 4))/2)}')
	# 當子視窗銷燬時,聚焦到主視窗上,並撤銷禁用,銷燬子視窗
	def delete_window():
	    window.focus()
	    window.attributes("-disabled", False)
	    about_window.destroy()
	# 視窗銷燬時觸發的回撥
	about_window.protocol("WM_DELETE_WINDOW", delete_window)
about_menu = Menu(window)
about_menu.add_command(label="關於", command=about)

3.6.執行耗時操作

在介面執行耗時操作時建議使用多執行緒方式執行,否則會導致視窗卡死

3.7.常用輸入框刪除、新增內容

# 刪除內容
text.delete(0, tkinter.END)
# 新增內容
text.insert(tkinter.INSERT, "text")
# 將游標置於最後
text.see(tkinter.END)