欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PyQt5中QPushButton的用法詳細(xì)解析與應(yīng)用實(shí)戰(zhàn)

 更新時(shí)間:2024年07月26日 10:27:26   作者:景天科技苑  
PyQt5 是一個(gè)用于創(chuàng)建圖形用戶界面的 Python 綁定庫(kù),它基于 Qt5 應(yīng)用程序框架,在 PyQt5 中,QPushButton 是一個(gè)常用的控件,用于創(chuàng)建按鈕,允許用戶通過(guò)點(diǎn)擊來(lái)觸發(fā)某些操作,本文將詳細(xì)介紹 QPushButton 的用法,并通過(guò)實(shí)際案例來(lái)展示其強(qiáng)大的功能

引言

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)。注意,這里使用了 QPropertyAnimationb"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線程的同步互斥與死鎖

    淺談Python線程的同步互斥與死鎖

    這篇文章主要介紹了淺談Python線程的同步互斥與死鎖,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 用python制作詞云視頻詳解

    用python制作詞云視頻詳解

    這篇文章主要介紹了用python制作詞云視頻詳解,原理解釋清晰,代碼詳細(xì),用于練習(xí)很適合,需要的朋友可以參考下
    2021-04-04
  • python使用wxpy實(shí)現(xià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í)例

    今天小編就為大家分享一篇使用python制作一個(gè)為hex文件增加版本號(hào)的腳本實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • Python基于opencv調(diào)用攝像頭獲取個(gè)人圖片的實(shí)現(xiàn)方法

    Python基于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-02
  • Pandas之缺失數(shù)據(jù)的實(shí)現(xiàn)

    Pandas之缺失數(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-01
  • Python中常見(jiàn)的一些魔法方法及其用途

    Python中常見(jiàn)的一些魔法方法及其用途

    這篇文章主要介紹了Python中常見(jiàn)的一些魔法方法及其用途,文中通過(guò)一個(gè)簡(jiǎn)單的Vector類示例,展示了如何使用這些魔法方法來(lái)實(shí)現(xiàn)功能豐富的類,需要的朋友可以參考下
    2024-12-12
  • python2.7 安裝pip的方法步驟(管用)

    python2.7 安裝pip的方法步驟(管用)

    這篇文章主要介紹了python2.7 安裝pip的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • python基礎(chǔ)知識(shí)之try...except...的詳細(xì)用法實(shí)例

    python基礎(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
  • Python爬取微信小程序通用方法代碼實(shí)例詳解

    Python爬取微信小程序通用方法代碼實(shí)例詳解

    這篇文章主要介紹了Python爬取微信小程序通用方法代碼實(shí)例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09

最新評(píng)論