帶你詳細了解Python GUI編程框架
1. GUI編程類關系圖
我們來看看Tkinter 的GUI組件關系圖

重要說明:
1.上述圖表示的是相關類的繼承關系圖,從右到左子類繼承父類。
(1) 比如:組件Label Label繼承->Widget類->繼承Basewidget類->繼承Misc類->繼承Object父類
子類擁有父類的所有的屬性和方法
2.Misc和Wim
Tkinter 的 GUI組件有兩個父類,它們直接繼承了Object類
1.Misc 是所有組件的根父類
2.Wim 主要提供一些與窗口管理器通信的功能函數(shù)
3.TK
1.Misc 和 Wim 派生出類TK。
2.代表應用程序的主窗口,一般應用程序都需要直接或者間接使用TK
3.程序中通常定義
# 定義主窗口 root = TK()
4.Pack類、Place類、Grid類是我們常用的布局管理器
1.布局管理器管理組件的大小、位置
2.可以將容器中組件實現(xiàn)合理的排布
5.Basewidget是所有組件的父類
6.Widget是所有組件的父類
widget共有四個父類:BaseWidget、Pack、Grid、Place
GUI所有組件都具備四個父類的所有屬性和方法

2. 常用組件方法
| Tkinter類 | 名稱 | 簡介 |
|---|---|---|
| Toplevel | 頂層 | 容器類,可用于為其他組件提供單獨的容器,Toplevel 有點類似于窗口 |
| Button | 按鈕 | 代表按鈕組件 |
| Canvas | 畫布 | 提供繪圖功能包括直線、矩形、橢圓、多邊形、位圖等 |
| Checkbutton | 復選框 | 可供用戶勾選的復選框 |
| Entry | 單行輸入框 | 用戶可輸入的內(nèi)容 |
| Frame | 容器 | 用于裝載其他GUI組件 |
| Label | 標簽 | 用于顯示不可編輯的文本或者圖標 |
| LabelFrame | 容器 | 也是容器組件,類似Frame,它可以支持添加標題 |
| Listbox | 列表框 | 列出多個選項,供用戶選擇 |
| Menu | 菜單 | 菜單組件 |
| Menubutton | 菜單按鈕 | 用來包含菜單的按鈕(包括下拉式、層疊式) |
| OptionMenu | 菜單按鈕 | Menubutton 的子類,也代表菜單按鈕,可以通過按鈕打開一個菜單 |
| Message | 消息框 | 類似標簽,可以顯示多行文本 |
3.GUI面向對象寫法
我們前面已經(jīng)使用過Tkinter 類來創(chuàng)建一個簡單的GUI程序,步驟大致為:
1.創(chuàng)建根窗口
2.創(chuàng)建組件
3.布局排版管理
4.導入事件
.....以上都是基于過程的編程寫法
但是,我們實際工作中,開發(fā)的程序都是比較復雜的
GUI編程我們也要使用面向對象方式去編程,更加合理的組織我們代碼
GUI面向對象編程寫法關鍵點:
官網(wǎng)DEMO版本:

- 使用Application類來組織各個GUI程序
- Application類繼承了Frame類及所有父類特性
- 使用構造函數(shù)__init__()初始化窗口中的對象
- 使用createwidgets()方法創(chuàng)建窗口中的對象
- 創(chuàng)建主窗口root
- 運行調(diào)用Application來調(diào)用GUI對象
- 循環(huán)事件管理與用戶進行交互
Frame框架是Tkinter組件,表示一個矩形的區(qū)域,F(xiàn)rame一般作為容器使用,可以放置其他組件,從而實現(xiàn)復雜的布局
面向對象代碼邏輯拆分圖:

根據(jù)官網(wǎng)推薦的DEMO版本,我們來使用面向對象思想實現(xiàn)GUI程序
from tkinter import *
class Application(Frame):
def __init__(self,master=None):
# super()代表的是父類的定義,而不是父類對象
super().__init__(master)
self.master = master
self.pack()
self.createwidget()
def createwidget(self):
self.but1 = Button(self)
self.but1["text"] = "add"
self.but1.pack()
self.but1["command"] = self.addinfo
def addinfo(self):
messagebox.showinfo("提示","添加成功")
root = Tk()
root.geometry("400x100+200+300")
root.title("MyfirstAPP")
app = Application(master=root)
root.mainloop()

總結
我們學習GUI編程面向對象的寫法,讓我們代碼更加的整潔,提高代碼的重復使用率。
GUI 面向對象編程使用繼承Frame類使用構造函數(shù)來替代反復創(chuàng)建組件對象,組件操作全部封裝到createwidget方法,Application對象直接通過master來調(diào)用。
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關注腳本之家的更多內(nèi)容!
相關文章
python使用minimize()?函數(shù)替代matlab的fmincon函數(shù)
這篇文章主要介紹了python使用minimize()函數(shù)替代matlab的fmincon函數(shù),在matlab中,fmincon函數(shù)可以用于求解帶約束的非線性多變量函數(shù)的最小值,即可以用來求解非線性規(guī)劃問題2022-09-09
Python使用type動態(tài)創(chuàng)建類操作示例
這篇文章主要介紹了Python使用type動態(tài)創(chuàng)建類操作,結合實例形式詳細分析了Python使用type動態(tài)創(chuàng)建類的具體原理、實現(xiàn)方法與操作注意事項,需要的朋友可以參考下2020-02-02
Pytorch 如何加速Dataloader提升數(shù)據(jù)讀取速度
這篇文章主要介紹了Pytorch 加速Dataloader提升數(shù)據(jù)讀取速度的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05
python游戲庫pygame經(jīng)典教程(推薦!)
Python Pygame是一款專門為開發(fā)和設計 2D 電子游戲而生的軟件包,是入門級游戲開發(fā)庫,下面這篇文章主要給大家介紹了python游戲庫pygame經(jīng)典教程的相關資料,需要的朋友可以參考下2022-12-12
python采用getopt解析命令行輸入?yún)?shù)實例
這篇文章主要介紹了python采用getopt解析命令行輸入?yún)?shù)實例,非常具有實用價值,需要的朋友可以參考下2014-09-09

