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,因此它只適合開發一些簡單的程式,比如計算器的介面
引用自
2.常用元件方法
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)