網(wǎng)站首頁 編程語言 正文
前言? ??
在最早程序的設(shè)計(jì)中,程序和用戶的交互都是通過控制臺(tái)來完成的,而GUI(Graphics User Interface),即圖形用戶編程,是Python 所提供的一個(gè)豐富的組件,可以快速的實(shí)現(xiàn)使用圖形界面和用戶交互。
常用的GUI庫
1.Tkinter
tkinter(TK interface)是Python內(nèi)置的標(biāo)準(zhǔn)GUI庫,支持跨平臺(tái)的GUI程序開發(fā),tkinter 適合小型的GUI程序編寫,也特別適合初學(xué)者學(xué)習(xí)GUI編程。
2.wxPython
wxPython是比較流行的GUI庫,適合大型應(yīng)用程序開發(fā),功能強(qiáng)于tkinter,整體設(shè)計(jì)框架類似于MFC(Microsoft Foundation Classes 微軟基礎(chǔ)類庫)。
3.PyQT
Qt是一種開源的GUI庫,適合大型GUI程序開發(fā),PyQT是Qt工具包標(biāo)準(zhǔn)的Python實(shí)現(xiàn),我們可以使用Qt Dseginer 界面設(shè)計(jì)器快速開發(fā)GUI應(yīng)用程序。
基于tkinter模塊創(chuàng)建GUI程序步驟
1.創(chuàng)建應(yīng)用程序主窗口對象——通過類Tk的無參構(gòu)造函數(shù)
from tkinter import *
from tkinter import messagebox
root = Tk()
2.在主窗口中,添加各種可視化組件,比如:按鈕(Button) 文本框(Label)等。
btn01 = Button(root)
btn01["text"] = "創(chuàng)作不易,點(diǎn)個(gè)贊再走唄"
3.通過幾何布局管理器,管理組件的大小和位置
btn01.pack()
4.事件處理
通過綁定事件處理程序,響應(yīng)用戶操作所觸發(fā)的事件(比如:單擊、雙擊等)
def dianzai(e):
messagebox.showinf("Message","點(diǎn)個(gè)贊,讓你關(guān)注我")
print("點(diǎn)一個(gè)贊")
btn01.bind("<Button>",dainzan)
主窗口設(shè)置
主窗口位置和大小
通過geometry(wxh +/- x +/- y)進(jìn)行設(shè)置,w為寬度,h為高度。+x表示距屏幕左邊的距離,-x表示距屏幕右邊的距離,+y表示屏幕上邊的距離,-y表示屏幕下邊的距離。表示寬度500,高度300,距左邊100個(gè)像素,距上邊100個(gè)像素。
root.title = ("來點(diǎn)贊呀") # 建立標(biāo)題
root.geometry("500x300+100+100")
基于上述功能,代碼實(shí)現(xiàn)如下:
from tkinter import *
from tkinter import messagebox
root = Tk() # 創(chuàng)建主窗口
root.title = ("來點(diǎn)贊呀") # 建立標(biāo)題欄
root.geometry("500x300+100+100")
btn01 = Button(root) # 建立一個(gè)btn01對象設(shè)置,將窗口放進(jìn)去
btn01["text"] = "創(chuàng)作不易,點(diǎn)個(gè)贊再走唄"
btn01.pack() # 調(diào)用布局管理器,將組件對象合理的放入窗口中
def dian_zan(e): # e 封裝的事件對象
messagebox.showinfo("Message", "點(diǎn)個(gè)贊")
print("點(diǎn)個(gè)贊")
btn01.bind("<Button>", dian_zan) # 綁定事件
root.mainloop() # 調(diào)用組件的mainloop()方法,進(jìn)入事件循環(huán)
顯示如下:
GUI編程整體描述?
圖形用戶界面是由一個(gè)個(gè)組件組成的,有的組件還能在組件里邊放置其他的組件,我們成為容器,Tkinter GUI組件關(guān)系如下:
接下來,我們在代碼中查看對象的繼承關(guān)系圖,以button為例:ctrl + 鼠標(biāo)左鍵,跳入button中,然后鼠標(biāo)右鍵,查看繼承結(jié)構(gòu)圖如下:
常用組件匯總列表
TKinter類 | 名稱 | 簡介 |
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)簽,但是可以顯示多行文本,后來當(dāng)Label也能顯示 |
GUI應(yīng)用程序類的經(jīng)典寫法
GUI應(yīng)用程序的主要結(jié)構(gòu),采用的面向?qū)ο蟮姆绞?,更加合理的組織代碼,方便日后的維護(hù)。通過類Application組織整個(gè)GUI程序,類Application繼承了Frame及通過繼承擁有了父類的特征,通過構(gòu)造函數(shù)_init_()初始化窗口中的對象,通過createWidgets()方法創(chuàng)建窗口中的對象。Frame框架是一個(gè)tkinter組件,表示一個(gè)矩形的區(qū)域。Frame一般作為容器使用,可以放置其他組件,從而實(shí)現(xiàn)復(fù)雜的布局。
"""
測試一個(gè)經(jīng)典的GUI程序的寫法,使用面向?qū)ο蟮姆绞?
"""
from tkinter import *
from tkinter import messagebox
class Application(Frame):
"""面向?qū)ο?""
def _int_(self,master=None):
super()._init_(master) # super()代表的是父類的定義,而不是父類對象
self.master = master
self.pack()
self.createWidget()
def createWidget(self):
self.btn01 = Button(self)
self.btn01["text"] = "哈哈哈哈哈哈哈"
self.btn01.pack()
self.btn01["command"] = self.dianzan
# 創(chuàng)建一個(gè)退出程序
self.btnQuit = Button(self,text="退出",command=root.destroy)
self.btnQuit.pack()
def dianzan(self):
messagebox.showinfo("Message", "點(diǎn)個(gè)贊")
print("點(diǎn)個(gè)贊")
root = Tk()
root.geometry("400x300+100+200")
root.title("點(diǎn)贊")
app = Application(master=root)
root.mainloop()
總結(jié)
原文鏈接:https://blog.csdn.net/zywcxz/article/details/128406919
相關(guān)推薦
- 2022-11-04 Android實(shí)現(xiàn)簡易秒表功能_Android
- 2022-06-24 超詳細(xì)的Python安裝第三方庫常用方法匯總_python
- 2022-11-29 redis的主從復(fù)制,哨兵和cluster集群
- 2022-11-21 Go語言讀寫鎖RWMutex的源碼分析_Golang
- 2022-12-22 利用C++求解八數(shù)碼問題實(shí)例代碼_C 語言
- 2022-12-09 Android入門之ProgressBar的使用教程_Android
- 2023-05-23 Python實(shí)現(xiàn)指定數(shù)組下標(biāo)值正序與倒序排序算法功能舉例_python
- 2022-02-17 如何通過一道題,全方位地考察自己,是否已經(jīng)完美掌握了:this指向、作用域&作用域鏈、閉包、
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支