PyQt5中QPushButton的用法詳細(xì)解析與應(yīng)用實(shí)戰(zhàn)
引言
PyQt5 是一個(gè)用于創(chuàng)建圖形用戶界面的 Python 綁定庫(kù),它基于 Qt5 應(yīng)用程序框架。在 PyQt5 中,QPushButton
是一個(gè)常用的控件,用于創(chuàng)建按鈕,允許用戶通過(guò)點(diǎn)擊來(lái)觸發(fā)某些操作。
用來(lái)給用戶點(diǎn)擊, 來(lái)完成某種動(dòng)作的控件,一般是矩形的
應(yīng)用場(chǎng)景
例如:登錄按鈕,注冊(cè)按鈕,關(guān)閉按鈕,一些選擇按鈕等等等
QPushButton繼承于QAbstractButton,所以具有AbstractButton的一切特性,而且QPushButton還包含自己特有的一些功能。
本文將詳細(xì)介紹 QPushButton
的用法,并通過(guò)實(shí)際案例來(lái)展示其強(qiáng)大的功能。
1. QPushButton 控件基礎(chǔ)
1.1 描述
QPushButton
控件是一個(gè)矩形按鈕,通常用于執(zhí)行如登錄、注冊(cè)、關(guān)閉等操作。用戶可以通過(guò)點(diǎn)擊按鈕來(lái)觸發(fā)一個(gè)事件或操作。
1.2 繼承關(guān)系
QPushButton
控件繼承自 QAbstractButton
類,這意味著它擁有 QAbstractButton
的所有功能,并增加了自己的特性。
1.3 初始化函數(shù)
QPushButton
的初始化函數(shù)可以接收多個(gè)參數(shù),具體取決于你想如何配置按鈕。最常見(jiàn)的用法包括:
QPushButton()
:創(chuàng)建一個(gè)無(wú)父控件和文本的按鈕。QPushButton(parent)
:創(chuàng)建控件的同時(shí),設(shè)置父控件。QPushButton(text, parent)
:創(chuàng)建控件的同時(shí),設(shè)置提示文本和父控件。QPushButton(icon, text, parent)
:創(chuàng)建控件的同時(shí),設(shè)置圖標(biāo)、提示文本和父控件。
2. QPushButton 的常用功能
2.1 創(chuàng)建按鈕
按鈕可以顯示文本和圖標(biāo)。使用 setText()
方法設(shè)置文本,使用 setIcon()
和 setIconSize()
方法設(shè)置圖標(biāo)及其大小。
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton from PyQt5.QtGui import QIcon app = QApplication([]) window = QWidget() window.setWindowTitle('QPushButton 示例') btn = QPushButton(window) btn.setText('點(diǎn)擊我') icon = QIcon('icon.png') btn.setIcon(icon) btn.setIconSize(QSize(30, 30)) # 假設(shè)需要導(dǎo)入QSize btn.show() window.show() app.exec_()
代碼展示:
# 0. 導(dǎo)入需要的包和模塊 from PyQt5.Qt import * # 主要包含了我們常用的一些類, 匯總到了一塊 import sys # 1. 創(chuàng)建一個(gè)應(yīng)用程序?qū)ο? app = QApplication(sys.argv) # 2. 控件的操作 # 2.1 創(chuàng)建控件 window = QWidget() # 2.2 設(shè)置控件 #設(shè)置窗口標(biāo)題,默認(rèn)標(biāo)題是python,只有頂級(jí)控件才可以設(shè)置標(biāo)題欄的標(biāo)題 window.setWindowTitle("QPushButton創(chuàng)建") #設(shè)置窗口大小,注意,設(shè)置的空間尺寸大小,不包含上面的標(biāo)題欄 window.resize(500, 500) #創(chuàng)建按鈕 #創(chuàng)建方式一,指定活不指定父控件 btn = QPushButton(window) btn.setText("按鈕1") #創(chuàng)建方式二,創(chuàng)建按鈕的同時(shí),設(shè)置提示文本和父控件 btn2 = QPushButton('按鈕2',window) btn2.move(50,50) #創(chuàng)建方式三,創(chuàng)建控件的同時(shí), 設(shè)置圖標(biāo), 提示文本和父控件 btn3 = QPushButton(QIcon("../../imgs/python-gui.png"),'按鈕3',window) btn3.move(100,100) # 2.3 展示控件 window.show() # 3. 應(yīng)用程序的執(zhí)行, 進(jìn)入到消息循環(huán) sys.exit(app.exec_())
運(yùn)行可見(jiàn),三種創(chuàng)建方式都可以
2.2 啟用和禁用
可以使用 setEnabled()
方法啟用或禁用按鈕。禁用的按鈕不會(huì)響應(yīng)用戶的點(diǎn)擊操作。
btn.setEnabled(False) # 禁用按鈕
2.3 設(shè)置快捷鍵
QPushButton
支持設(shè)置快捷鍵,允許用戶通過(guò)鍵盤操作來(lái)觸發(fā)按鈕的點(diǎn)擊事件。使用 setShortcut()
方法設(shè)置快捷鍵。
btn.setShortcut('Ctrl+Q') # 設(shè)置快捷鍵為 Ctrl+Q
這個(gè)與其父類QAbdtractButton用法一樣,略
2.4 菜單設(shè)置
當(dāng)我們鼠標(biāo),點(diǎn)擊按鈕之后,可以展開一系列的下拉菜單供我們選擇
當(dāng)我們創(chuàng)建菜單之后,用戶點(diǎn)擊按鈕,就會(huì)展示相關(guān)菜單
API介紹
showMenu()指的是我們程序員可以通過(guò)代碼來(lái)控制按鈕來(lái)展示菜單
當(dāng)我們把鼠標(biāo)放在某菜單上面,會(huì)顯示出第二列,甚至第三列的菜單稱為子菜單
QMenu相關(guān)操作
代碼展示:
# 0. 導(dǎo)入需要的包和模塊 from PyQt5.Qt import * # 主要包含了我們常用的一些類, 匯總到了一塊 import sys # 1. 創(chuàng)建一個(gè)應(yīng)用程序?qū)ο? app = QApplication(sys.argv) # 2. 控件的操作 # 2.1 創(chuàng)建控件 window = QWidget() # 2.2 設(shè)置控件 #設(shè)置窗口標(biāo)題,默認(rèn)標(biāo)題是python,只有頂級(jí)控件才可以設(shè)置標(biāo)題欄的標(biāo)題 window.setWindowTitle("菜單創(chuàng)建") #設(shè)置窗口大小,注意,設(shè)置的空間尺寸大小,不包含上面的標(biāo)題欄 window.resize(500, 500) #創(chuàng)建按鈕 btn = QPushButton(window) btn.setText("按鈕1") #創(chuàng)建菜單 menu = QMenu(window) #將菜單放到按鈕上,此時(shí)按鈕就會(huì)出現(xiàn)一個(gè)下拉箭頭 btn.setMenu(menu) # 子菜單 最近打開 # open_recent_menu = QMenu(menu) #設(shè)置子菜單標(biāo)題 # open_recent_menu.setTitle("最近打開") #一次性寫全,創(chuàng)建子菜單 #QMenu(title: Optional[str], parent: Optional[QWidget] = None) open_recent_menu = QMenu("最近打開",menu) # 行為動(dòng)作 新建 打開 分割線 退出 # new_action = QAction() # new_action.setText("新建") # new_action.setIcon(QIcon("../../imgs/python-gui.png")) #新建,一次性寫全創(chuàng)建動(dòng)作 #QAction(icon: QIcon, text: Optional[str], parent: Optional[QObject] = None) new_action = QAction(QIcon("../../imgs/python-gui.png"), "新建", menu) #通過(guò)信號(hào)來(lái)執(zhí)行相應(yīng)的槽函數(shù) new_action.triggered.connect(lambda: print("新建文件")) #打開 open_action = QAction(QIcon("xxx.png"), "打開", menu) open_action.triggered.connect(lambda: print("打開文件")) #退出程序 exit_action = QAction("退出", menu) # exit_action.triggered.connect(lambda: print("退出程序")) exit_action.triggered.connect(lambda: window.close()) #子菜單動(dòng)作 file_action = QAction("Python-GUI編程-PyQt5") file_action.triggered.connect(lambda :print("Python-GUI編程-PyQt5")) #將動(dòng)作添加到菜單上,點(diǎn)擊菜單執(zhí)行相應(yīng)動(dòng)作 menu.addAction(new_action) menu.addAction(open_action) #子菜單添加動(dòng)作 open_recent_menu.addAction(file_action) #添加子菜單 menu.addMenu(open_recent_menu) #添加分割線 menu.addSeparator() menu.addAction(exit_action) # 2.3 展示控件 window.show() #展示菜單,相當(dāng)于用戶點(diǎn)擊了按鈕的菜單按鈕 #展示菜單的代碼一定要在主窗口展示之后,否則展示不到 # btn.showMenu() #獲取菜單 print(btn.menu()) # 3. 應(yīng)用程序的執(zhí)行, 進(jìn)入到消息循環(huán) sys.exit(app.exec_())
點(diǎn)擊下拉菜單
點(diǎn)擊新建,會(huì)觸發(fā)信號(hào)
2.4 邊框是否扁平
QPushButton
支持設(shè)置邊框是否扁平。扁平化的按鈕在某些樣式下可能不繪制背景,只顯示文本或圖標(biāo)。使用 setFlat()
方法設(shè)置此屬性。
設(shè)置了按鈕扁平化之后,給按鈕設(shè)置的背景顏色等樣式,都不在生效
代碼展示:
# 0. 導(dǎo)入需要的包和模塊 from PyQt5.Qt import * # 主要包含了我們常用的一些類, 匯總到了一塊 import sys # 1. 創(chuàng)建一個(gè)應(yīng)用程序?qū)ο? app = QApplication(sys.argv) # 2. 控件的操作 # 2.1 創(chuàng)建控件 window = QWidget() # 2.2 設(shè)置控件 #設(shè)置窗口標(biāo)題,默認(rèn)標(biāo)題是python,只有頂級(jí)控件才可以設(shè)置標(biāo)題欄的標(biāo)題 window.setWindowTitle("按鈕扁平化") #設(shè)置窗口大小,注意,設(shè)置的空間尺寸大小,不包含上面的標(biāo)題欄 window.resize(500, 500) #創(chuàng)建按鈕,默認(rèn)按鈕是凸出來(lái)的 btn = QPushButton(window) btn.setText("按鈕") #查看默認(rèn)情況下,按鈕是否扁平化 # print(btn.isFlat()) #False #給按鈕設(shè)置背景顏色 btn.setStyleSheet("background-color: red;") #設(shè)置按鈕扁平化 btn.setFlat(True) #再次查看按鈕是否扁平化 print(btn.isFlat()) #True # 2.3 展示控件 window.show() # 3. 應(yīng)用程序的執(zhí)行, 進(jìn)入到消息循環(huán) sys.exit(app.exec_())
設(shè)置扁平化之前,按鈕有凸起
設(shè)置扁平化
btn.setFlat(True)
按鈕不再有凸起,而是與周邊樣式一樣
當(dāng)點(diǎn)下按鈕,才能看到按鈕樣式
而且設(shè)置扁平化之后,給按鈕設(shè)置的背景顏色等樣式也不再生效
未設(shè)置扁平化之前,按鈕背景顏色設(shè)為了紅色,且顯示紅色
設(shè)置扁平化之后,按鈕背景顏色不再顯示
只有點(diǎn)下時(shí),才顯示
2.5 信號(hào)和槽
QPushButton
的主要事件是 clicked
,即按鈕被點(diǎn)擊時(shí)觸發(fā)??梢酝ㄟ^(guò) clicked.connect()
方法將 clicked
信號(hào)連接到自定義的槽函數(shù)。
def on_click(): print('按鈕被點(diǎn)擊了') btn.clicked.connect(on_click)
2.6 默認(rèn)按鈕處理
主要應(yīng)用場(chǎng)景在 彈出對(duì)話框時(shí),默認(rèn)光標(biāo)所在的按鈕
例如如下所示,當(dāng)我們點(diǎn)擊打開文件按鈕,會(huì)彈出一個(gè)對(duì)話框,此時(shí)鼠標(biāo)光標(biāo)會(huì)默認(rèn)落在 打開 這個(gè)按鈕上
默認(rèn)按鈕處理有自動(dòng)默認(rèn)處理和設(shè)置默認(rèn)
自動(dòng)默認(rèn)按鈕,指的是當(dāng)用戶點(diǎn)擊該按鈕,該按鈕就自動(dòng)的會(huì)被選中為默認(rèn)的
setDefault()是直接設(shè)置該按鈕為默認(rèn)按鈕
默認(rèn)情況下,我們點(diǎn)擊按鈕,松開后會(huì)恢復(fù)原樣
代碼展示:
# 0. 導(dǎo)入需要的包和模塊 from PyQt5.Qt import * # 主要包含了我們常用的一些類, 匯總到了一塊 import sys # 1. 創(chuàng)建一個(gè)應(yīng)用程序?qū)ο? app = QApplication(sys.argv) # 2. 控件的操作 # 2.1 創(chuàng)建控件 window = QWidget() # 2.2 設(shè)置控件 #設(shè)置窗口標(biāo)題,默認(rèn)標(biāo)題是python,只有頂級(jí)控件才可以設(shè)置標(biāo)題欄的標(biāo)題 window.setWindowTitle("默認(rèn)按鈕") #設(shè)置窗口大小,注意,設(shè)置的空間尺寸大小,不包含上面的標(biāo)題欄 window.resize(500, 500) btn = QPushButton(window) btn.setText("按鈕1") btn2 = QPushButton(window) btn2.setText("btn2") btn2.move(100, 100) # 2.3 展示控件 window.show() # 3. 應(yīng)用程序的執(zhí)行, 進(jìn)入到消息循環(huán) sys.exit(app.exec_())
當(dāng)我們?cè)O(shè)置為自動(dòng)默認(rèn)按鈕后,用戶再點(diǎn)擊該按鈕,即便釋放后,該按鈕也會(huì)處于被選中狀態(tài)
btn2.setAutoDefault(True) #查看按鈕是否設(shè)置了自動(dòng)默認(rèn)按鈕 print(btn.autoDefault()) print(btn2.autoDefault())
當(dāng)我們點(diǎn)擊btn2,btn2就會(huì)處于被選中狀態(tài)
由下列的打印也可得知,btn2設(shè)置了自動(dòng)默認(rèn)按鈕
setAutoDefault() 是用戶點(diǎn)擊了,才設(shè)置為自動(dòng)默認(rèn)
如果想要一開始就是默認(rèn)按鈕,則使用setDefault()
#設(shè)置默認(rèn)按鈕 btn2.setDefault(True) #查看是夠設(shè)置了默認(rèn)按鈕 print(btn.isDefault()) print(btn2.isDefault())
此時(shí),運(yùn)行程序,btn2就設(shè)置了默認(rèn)按鈕,處于被選中狀態(tài)
2.7 右鍵菜單
用戶用鼠標(biāo)右鍵點(diǎn)擊窗口后,彈出來(lái)的菜單
右鍵菜單實(shí)際上是通過(guò)發(fā)射信號(hào)來(lái)實(shí)現(xiàn)的
QPushbutton的信號(hào)都是繼承自父類的
右鍵菜單實(shí)現(xiàn)的方式有兩種
方法一
也是默認(rèn)的,window.setContextMenuPolicy(Qt.DefaultContextMenu)
當(dāng)我們?cè)赑yQT5組件上右鍵點(diǎn)擊窗體時(shí)會(huì)觸發(fā)一個(gè)事件:contextMenuEvent,
默認(rèn)情況下,window.setContextMenuPolicy()里面的是參數(shù)是Qt.DefaultContextMenu,鼠標(biāo)右鍵執(zhí)行的是contextMenuEvent
我們要想自己設(shè)計(jì)右鍵點(diǎn)擊后彈出的事件,我們就必須要重載contextMenuEvent這個(gè)方法。
代碼展示:
# 0. 導(dǎo)入需要的包和模塊 from PyQt5.Qt import * # 主要包含了我們常用的一些類, 匯總到了一塊 import sys #重寫個(gè)窗口類,繼承QWidget,重寫contextMenuEvent方法 class Window(QWidget): # 重寫contextMenuEvent方法,然后在該窗口下只要鼠標(biāo)右鍵,就會(huì)觸發(fā)該方法,執(zhí)行該方法中的邏輯 def contextMenuEvent(self, evt): print("在窗口中右鍵點(diǎn)擊鼠標(biāo)") # 1. 創(chuàng)建一個(gè)應(yīng)用程序?qū)ο? app = QApplication(sys.argv) # 2. 控件的操作 # 2.1 創(chuàng)建控件 window = Window() # 2.2 設(shè)置控件 #設(shè)置窗口標(biāo)題,默認(rèn)標(biāo)題是python,只有頂級(jí)控件才可以設(shè)置標(biāo)題欄的標(biāo)題 window.setWindowTitle("右鍵菜單") #設(shè)置窗口大小,注意,設(shè)置的空間尺寸大小,不包含上面的標(biāo)題欄 window.resize(500, 500) # 2.3 展示控件 window.show() # 3. 應(yīng)用程序的執(zhí)行, 進(jìn)入到消息循環(huán) sys.exit(app.exec_())
鼠標(biāo)右鍵
右擊展示菜單代碼
# 0. 導(dǎo)入需要的包和模塊 from PyQt5.Qt import * # 主要包含了我們常用的一些類, 匯總到了一塊 import sys #重寫個(gè)窗口類,繼承QWidget,重寫contextMenuEvent方法 class Window(QWidget): # 重寫contextMenuEvent方法,然后在該窗口下只要鼠標(biāo)右鍵,就會(huì)觸發(fā)該方法,執(zhí)行該方法中的邏輯 # QContextMenuEvent def contextMenuEvent(self, evt): # print("在窗口中右鍵點(diǎn)擊鼠標(biāo)") # 創(chuàng)建菜單 menu = QMenu(window) # 子菜單 最近打開 # open_recent_menu = QMenu(menu) # 設(shè)置子菜單標(biāo)題 # open_recent_menu.setTitle("最近打開") # 一次性寫全,創(chuàng)建子菜單 # QMenu(title: Optional[str], parent: Optional[QWidget] = None) open_recent_menu = QMenu("最近打開", menu) # 行為動(dòng)作 新建 打開 分割線 退出 # new_action = QAction() # new_action.setText("新建") # new_action.setIcon(QIcon("../../imgs/python-gui.png")) # 新建,一次性寫全創(chuàng)建動(dòng)作 # QAction(icon: QIcon, text: Optional[str], parent: Optional[QObject] = None) new_action = QAction(QIcon("../../imgs/python-gui.png"), "新建", menu) # 通過(guò)信號(hào)來(lái)執(zhí)行相應(yīng)的槽函數(shù) new_action.triggered.connect(lambda: print("新建文件")) # 打開 open_action = QAction(QIcon("xxx.png"), "打開", menu) open_action.triggered.connect(lambda: print("打開文件")) # 退出程序 exit_action = QAction("退出", menu) # exit_action.triggered.connect(lambda: print("退出程序")) exit_action.triggered.connect(lambda: window.close()) # 子菜單動(dòng)作 file_action = QAction("Python-GUI編程-PyQt5") file_action.triggered.connect(lambda: print("Python-GUI編程-PyQt5")) # 將動(dòng)作添加到菜單上,點(diǎn)擊菜單執(zhí)行相應(yīng)動(dòng)作 menu.addAction(new_action) menu.addAction(open_action) # 子菜單添加動(dòng)作 open_recent_menu.addAction(file_action) # 添加子菜單 menu.addMenu(open_recent_menu) # 添加分割線 menu.addSeparator() menu.addAction(exit_action) #展示菜單用exec_()方法,執(zhí)行的時(shí)候傳遞QPoint對(duì)象,是哪個(gè)點(diǎn)的位置 #默認(rèn)菜單會(huì)在(0,0)位置展示 # 我們?cè)O(shè)置在鼠標(biāo)點(diǎn)擊的位置顯示菜單,evt.globalPos()獲取鼠標(biāo)右擊點(diǎn)的位置 #必須是相對(duì)于全局的坐標(biāo),不能是相對(duì)于窗口的坐標(biāo) menu.exec_(evt.globalPos()) # 1. 創(chuàng)建一個(gè)應(yīng)用程序?qū)ο? app = QApplication(sys.argv) # 2. 控件的操作 # 2.1 創(chuàng)建控件 window = Window() # 2.2 設(shè)置控件 #設(shè)置窗口標(biāo)題,默認(rèn)標(biāo)題是python,只有頂級(jí)控件才可以設(shè)置標(biāo)題欄的標(biāo)題 window.setWindowTitle("右鍵菜單") #設(shè)置窗口大小,注意,設(shè)置的空間尺寸大小,不包含上面的標(biāo)題欄 window.resize(500, 500) # 2.3 展示控件 window.show() # 3. 應(yīng)用程序的執(zhí)行, 進(jìn)入到消息循環(huán) sys.exit(app.exec_())
方法二
window.setContextMenuPolicy(Qt.CustomContextMenu)
需要自定義個(gè)槽函數(shù),根據(jù)信號(hào)觸發(fā)
代碼展示
# 0. 導(dǎo)入需要的包和模塊 from PyQt5.Qt import * # 主要包含了我們常用的一些類, 匯總到了一塊 import sys # 1. 創(chuàng)建一個(gè)應(yīng)用程序?qū)ο? app = QApplication(sys.argv) # 2. 控件的操作 # 2.1 創(chuàng)建控件 window = QWidget() # 2.2 設(shè)置控件 #設(shè)置窗口標(biāo)題,默認(rèn)標(biāo)題是python,只有頂級(jí)控件才可以設(shè)置標(biāo)題欄的標(biāo)題 window.setWindowTitle("右鍵菜單方式二") #設(shè)置窗口大小,注意,設(shè)置的空間尺寸大小,不包含上面的標(biāo)題欄 window.resize(500, 500) #自定義個(gè)方法,來(lái)創(chuàng)建菜單,形參接收一個(gè)相對(duì)于窗口的位置坐標(biāo)QPoint對(duì)象 def show_menu(point): print(point) # 創(chuàng)建菜單 menu = QMenu(window) # 子菜單 最近打開 # open_recent_menu = QMenu(menu) # 設(shè)置子菜單標(biāo)題 # open_recent_menu.setTitle("最近打開") # 一次性寫全,創(chuàng)建子菜單 # QMenu(title: Optional[str], parent: Optional[QWidget] = None) open_recent_menu = QMenu("最近打開", menu) # 行為動(dòng)作 新建 打開 分割線 退出 # new_action = QAction() # new_action.setText("新建") # new_action.setIcon(QIcon("../../imgs/python-gui.png")) # 新建,一次性寫全創(chuàng)建動(dòng)作 # QAction(icon: QIcon, text: Optional[str], parent: Optional[QObject] = None) new_action = QAction(QIcon("../../imgs/python-gui.png"), "新建", menu) # 通過(guò)信號(hào)來(lái)執(zhí)行相應(yīng)的槽函數(shù) new_action.triggered.connect(lambda: print("新建文件")) # 打開 open_action = QAction(QIcon("xxx.png"), "打開", menu) open_action.triggered.connect(lambda: print("打開文件")) # 退出程序 exit_action = QAction("退出", menu) # exit_action.triggered.connect(lambda: print("退出程序")) exit_action.triggered.connect(lambda: window.close()) # 子菜單動(dòng)作 file_action = QAction("Python-GUI編程-PyQt5") file_action.triggered.connect(lambda: print("Python-GUI編程-PyQt5")) # 將動(dòng)作添加到菜單上,點(diǎn)擊菜單執(zhí)行相應(yīng)動(dòng)作 menu.addAction(new_action) menu.addAction(open_action) # 子菜單添加動(dòng)作 open_recent_menu.addAction(file_action) # 添加子菜單 menu.addMenu(open_recent_menu) # 添加分割線 menu.addSeparator() menu.addAction(exit_action) # 展示菜單用exec_()方法 # 默認(rèn)菜單會(huì)在(0,0)位置展示 #方法中的參數(shù)point可以獲取鼠標(biāo)右鍵點(diǎn)擊相對(duì)于窗口的局部坐標(biāo) #window.mapToGlobal將point局部坐標(biāo)轉(zhuǎn)換為全局坐標(biāo)點(diǎn) # 將point局部坐標(biāo)點(diǎn),映射為相對(duì)于桌面的全局坐標(biāo)點(diǎn)坐標(biāo) dest_point = window.mapToGlobal(point) menu.exec_(dest_point) #自定義右鍵菜單,通過(guò)發(fā)射信號(hào)方式來(lái)觸發(fā),先將菜單上下文策略設(shè)為自定義模式 window.setContextMenuPolicy(Qt.CustomContextMenu) #根據(jù)定義的槽函數(shù)發(fā)射信號(hào) window.customContextMenuRequested.connect(show_menu) # 2.3 展示控件 window.show() # 3. 應(yīng)用程序的執(zhí)行, 進(jìn)入到消息循環(huán) sys.exit(app.exec_())
鼠標(biāo)在窗口上右鍵,彈出菜單
當(dāng)然,我們可以繼續(xù)深入討論 PyQt5 中 QPushButton
的高級(jí)用法以及如何在更復(fù)雜的應(yīng)用場(chǎng)景中使用它。以下是一些擴(kuò)展話題和示例:
3. 按鈕樣式定制
PyQt5 允許你通過(guò)樣式表(QSS,類似于 CSS)來(lái)自定義按鈕的外觀。這包括改變按鈕的背景色、邊框、字體等。
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton app = QApplication([]) window = QWidget() btn = QPushButton('定制樣式', window) btn.setStyleSheet(""" QPushButton { background-color: #4CAF50; color: white; border: 2px solid #3e8e41; border-radius: 10px; padding: 10px; font-size: 16px; min-width: 100px; } QPushButton:hover { background-color: #45a049; } QPushButton:pressed { background-color: #388e3c; } """) btn.show() window.show() app.exec_()
在這個(gè)例子中,我們?yōu)榘粹o設(shè)置了基本的樣式,包括背景色、文字顏色、邊框、邊框圓角、內(nèi)邊距、字體大小和最小寬度。同時(shí),我們還定義了鼠標(biāo)懸停和按鈕按下時(shí)的樣式變化。
4. 按鈕的動(dòng)畫效果
雖然 PyQt5 本身不直接支持復(fù)雜的動(dòng)畫效果,但你可以使用 QPropertyAnimation
來(lái)為按鈕添加簡(jiǎn)單的動(dòng)畫,如淡入淡出、大小變化等。
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton from PyQt5.QtCore import QPropertyAnimation, QRect, QPoint app = QApplication([]) window = QWidget() btn = QPushButton('動(dòng)畫效果', window) btn.setGeometry(50, 50, 100, 40) # 創(chuàng)建一個(gè)動(dòng)畫對(duì)象,用于改變按鈕的幾何形狀 animation = QPropertyAnimation(btn, b"geometry") animation.setDuration(1000) # 持續(xù)時(shí)間1000毫秒 animation.setStartValue(QRect(50, 50, 100, 40)) animation.setEndValue(QRect(150, 50, 100, 40)) # 移動(dòng)到新的位置 animation.start() # 開始動(dòng)畫 btn.show() window.show() app.exec_()
在這個(gè)例子中,我們創(chuàng)建了一個(gè)動(dòng)畫,使按鈕在屏幕上水平移動(dòng)。注意,這里使用了 QPropertyAnimation
的 b"geometry"
屬性來(lái)指定要改變的屬性。
5. 按鈕的分組和禁用
在某些情況下,你可能需要將多個(gè)按鈕組合在一起,并允許用戶一次只能激活其中一個(gè)。雖然 PyQt5 沒(méi)有直接提供按鈕組的控件,但你可以通過(guò)編程方式實(shí)現(xiàn)這一功能。
此外,如果你需要禁用一組按鈕中的某些按鈕,可以遍歷這些按鈕并調(diào)用它們的 setEnabled(False)
方法。
6. 按鈕的自定義行為
除了基本的點(diǎn)擊事件外,你還可以為按鈕添加其他類型的事件處理邏輯,如雙擊事件、長(zhǎng)按事件等。雖然 PyQt5 的 QPushButton
不直接支持雙擊和長(zhǎng)按事件,但你可以通過(guò)重寫按鈕的某些方法或使用定時(shí)器來(lái)模擬這些行為。
7. 實(shí)際應(yīng)用中的按鈕設(shè)計(jì)
在開發(fā)實(shí)際應(yīng)用程序時(shí),按鈕的設(shè)計(jì)應(yīng)該符合應(yīng)用程序的整體風(fēng)格和用戶體驗(yàn)。這包括按鈕的大小、顏色、位置、文本內(nèi)容以及圖標(biāo)的選擇。同時(shí),按鈕的響應(yīng)速度和反饋也是非常重要的,用戶應(yīng)該能夠清楚地知道他們的操作是否被系統(tǒng)識(shí)別和處理。
總結(jié)
QPushButton
是 PyQt5 中一個(gè)非常強(qiáng)大且靈活的控件,它允許你創(chuàng)建各種類型的按鈕來(lái)滿足不同的需求。通過(guò)本文的介紹,你應(yīng)該已經(jīng)掌握了 QPushButton
的基本用法和高級(jí)功能,并能夠在實(shí)際應(yīng)用中靈活運(yùn)用它。隨著你對(duì) PyQt5 的進(jìn)一步學(xué)習(xí),你會(huì)發(fā)現(xiàn)更多關(guān)于按鈕和其他控件的有趣用法和技巧。
以上就是PyQt5中QPushButton的用法詳細(xì)解析與應(yīng)用實(shí)戰(zhàn)的詳細(xì)內(nèi)容,更多關(guān)于PyQt5 QPushButton用法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python使用wxpy實(shí)現(xiàn)微信消息防撤回腳本
這篇文章主要為大家詳細(xì)介紹了python使用wxpy實(shí)現(xiàn)微信消息防撤回腳本,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04使用python制作一個(gè)為hex文件增加版本號(hào)的腳本實(shí)例
今天小編就為大家分享一篇使用python制作一個(gè)為hex文件增加版本號(hào)的腳本實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06Python基于opencv調(diào)用攝像頭獲取個(gè)人圖片的實(shí)現(xiàn)方法
今天小編就為大家分享一篇關(guān)于Python基于opencv調(diào)用攝像頭獲取個(gè)人圖片的實(shí)現(xiàn)方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02Pandas之缺失數(shù)據(jù)的實(shí)現(xiàn)
這篇文章主要介紹了Pandas之缺失數(shù)據(jù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01python基礎(chǔ)知識(shí)之try...except...的詳細(xì)用法實(shí)例
在各種編程語(yǔ)言進(jìn)行工作和學(xué)習(xí)的過(guò)程中,都會(huì)有一些錯(cuò)誤異常,下面這篇文章主要給大家介紹了關(guān)于python基礎(chǔ)知識(shí)之try...except...的詳細(xì)用法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08