帶你詳細(xì)了解Python GUI編程框架
1. GUI編程類關(guān)系圖
我們來看看Tkinter 的GUI組件關(guān)系圖
重要說明:
1.上述圖表示的是相關(guān)類的繼承關(guān)系圖,從右到左子類繼承父類。
(1) 比如:組件Label Label繼承->Widget類->繼承Basewidget類->繼承Misc類->繼承Object父類
子類擁有父類的所有的屬性和方法
2.Misc和Wim
Tkinter 的 GUI組件有兩個(gè)父類,它們直接繼承了Object類
1.Misc 是所有組件的根父類
2.Wim 主要提供一些與窗口管理器通信的功能函數(shù)
3.TK
1.Misc 和 Wim 派生出類TK。
2.代表應(yīng)用程序的主窗口,一般應(yīng)用程序都需要直接或者間接使用TK
3.程序中通常定義
# 定義主窗口 root = TK()
4.Pack類、Place類、Grid類是我們常用的布局管理器
1.布局管理器管理組件的大小、位置
2.可以將容器中組件實(shí)現(xiàn)合理的排布
5.Basewidget是所有組件的父類
6.Widget是所有組件的父類
widget共有四個(gè)父類:BaseWidget、Pack、Grid、Place
GUI所有組件都具備四個(gè)父類的所有屬性和方法
2. 常用組件方法
Tkinter類 | 名稱 | 簡(jiǎn)介 |
---|---|---|
Toplevel | 頂層 | 容器類,可用于為其他組件提供單獨(dú)的容器,Toplevel 有點(diǎn)類似于窗口 |
Button | 按鈕 | 代表按鈕組件 |
Canvas | 畫布 | 提供繪圖功能包括直線、矩形、橢圓、多邊形、位圖等 |
Checkbutton | 復(fù)選框 | 可供用戶勾選的復(fù)選框 |
Entry | 單行輸入框 | 用戶可輸入的內(nèi)容 |
Frame | 容器 | 用于裝載其他GUI組件 |
Label | 標(biāo)簽 | 用于顯示不可編輯的文本或者圖標(biāo) |
LabelFrame | 容器 | 也是容器組件,類似Frame,它可以支持添加標(biāo)題 |
Listbox | 列表框 | 列出多個(gè)選項(xiàng),供用戶選擇 |
Menu | 菜單 | 菜單組件 |
Menubutton | 菜單按鈕 | 用來包含菜單的按鈕(包括下拉式、層疊式) |
OptionMenu | 菜單按鈕 | Menubutton 的子類,也代表菜單按鈕,可以通過按鈕打開一個(gè)菜單 |
Message | 消息框 | 類似標(biāo)簽,可以顯示多行文本 |
3.GUI面向?qū)ο髮懛?/h3>
我們前面已經(jīng)使用過Tkinter 類來創(chuàng)建一個(gè)簡(jiǎn)單的GUI程序,步驟大致為:
1.創(chuàng)建根窗口
2.創(chuàng)建組件
3.布局排版管理
4.導(dǎo)入事件
.....以上都是基于過程的編程寫法
但是,我們實(shí)際工作中,開發(fā)的程序都是比較復(fù)雜的
GUI編程我們也要使用面向?qū)ο蠓绞饺ゾ幊?,更加合理的組織我們代碼
GUI面向?qū)ο缶幊虒懛P(guān)鍵點(diǎn):
官網(wǎng)DEMO版本:
- 使用Application類來組織各個(gè)GUI程序
- Application類繼承了Frame類及所有父類特性
- 使用構(gòu)造函數(shù)__init__()初始化窗口中的對(duì)象
- 使用createwidgets()方法創(chuàng)建窗口中的對(duì)象
- 創(chuàng)建主窗口root
- 運(yùn)行調(diào)用Application來調(diào)用GUI對(duì)象
- 循環(huán)事件管理與用戶進(jìn)行交互
Frame框架是Tkinter組件,表示一個(gè)矩形的區(qū)域,F(xiàn)rame一般作為容器使用,可以放置其他組件,從而實(shí)現(xiàn)復(fù)雜的布局
面向?qū)ο蟠a邏輯拆分圖:
根據(jù)官網(wǎng)推薦的DEMO版本,我們來使用面向?qū)ο笏枷雽?shí)現(xiàn)GUI程序
from tkinter import * class Application(Frame): def __init__(self,master=None): # super()代表的是父類的定義,而不是父類對(duì)象 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()
總結(jié)
我們學(xué)習(xí)GUI編程面向?qū)ο蟮膶懛?,讓我們代碼更加的整潔,提高代碼的重復(fù)使用率。
GUI 面向?qū)ο缶幊淌褂美^承Frame類使用構(gòu)造函數(shù)來替代反復(fù)創(chuàng)建組件對(duì)象,組件操作全部封裝到createwidget方法,Application對(duì)象直接通過master來調(diào)用。
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注本站的更多內(nèi)容!
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。