1. gui編程類關系圖
我們來看看tkinter 的gui組件關系圖
重要說明:
1.上述圖表示的是相關類的繼承關系圖,從右到左子類繼承父類。
(1) 比如:組件label label繼承->widget類->繼承basewidget類->繼承misc類->繼承object父類
子類擁有父類的所有的屬性和方法
2.misc和wim
tkinter 的 gui組件有兩個父類,它們直接繼承了object類
1.misc 是所有組件的根父類
2.wim 主要提供一些與窗口管理器通信的功能函數
3.tk
1.misc 和 wim 派生出類tk。
2.代表應用程序的主窗口,一般應用程序都需要直接或者間接使用tk
3.程序中通常定義
1
2
3
|
# 定義主窗口 root = tk() 復制代碼 |
4.pack類、place類、grid類是我們常用的布局管理器
1.布局管理器管理組件的大小、位置
2.可以將容器中組件實現合理的排布
5.basewidget是所有組件的父類
6.widget是所有組件的父類
widget共有四個父類:basewidget、pack、grid、place
gui所有組件都具備四個父類的所有屬性和方法
2. 常用組件方法
tkinter類 | 名稱 | 簡介 |
---|---|---|
toplevel | 頂層 | 容器類,可用于為其他組件提供單獨的容器,toplevel 有點類似于窗口 |
button | 按鈕 | 代表按鈕組件 |
canvas | 畫布 | 提供繪圖功能包括直線、矩形、橢圓、多邊形、位圖等 |
checkbutton | 復選框 | 可供用戶勾選的復選框 |
entry | 單行輸入框 | 用戶可輸入的內容 |
frame | 容器 | 用于裝載其他gui組件 |
label | 標簽 | 用于顯示不可編輯的文本或者圖標 |
labelframe | 容器 | 也是容器組件,類似frame,它可以支持添加標題 |
listbox | 列表框 | 列出多個選項,供用戶選擇 |
menu | 菜單 | 菜單組件 |
menubutton | 菜單按鈕 | 用來包含菜單的按鈕(包括下拉式、層疊式) |
optionmenu | 菜單按鈕 | menubutton 的子類,也代表菜單按鈕,可以通過按鈕打開一個菜單 |
message | 消息框 | 類似標簽,可以顯示多行文本 |
3.gui面向對象寫法
我們前面已經使用過tkinter 類來創建一個簡單的gui程序,步驟大致為:
1.創建根窗口
2.創建組件
3.布局排版管理
4.導入事件
.....以上都是基于過程的編程寫法
但是,我們實際工作中,開發的程序都是比較復雜的
gui編程我們也要使用面向對象方式去編程,更加合理的組織我們代碼
gui面向對象編程寫法關鍵點:
官網demo版本:
- 使用application類來組織各個gui程序
- application類繼承了frame類及所有父類特性
- 使用構造函數__init__()初始化窗口中的對象
- 使用createwidgets()方法創建窗口中的對象
- 創建主窗口root
- 運行調用application來調用gui對象
- 循環事件管理與用戶進行交互
frame框架是tkinter組件,表示一個矩形的區域,frame一般作為容器使用,可以放置其他組件,從而實現復雜的布局
面向對象代碼邏輯拆分圖:
根據官網推薦的demo版本,我們來使用面向對象思想實現gui程序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
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類使用構造函數來替代反復創建組件對象,組件操作全部封裝到createwidget方法,application對象直接通過master來調用。
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關注服務器之家的更多內容!
原文鏈接:https://blog.csdn.net/lh9987/article/details/119842896