最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

引言

PyQt5 是一個(gè)用于創(chuàng)建圖形用戶(hù)界面的 Python 綁定庫(kù),它基于 Qt5 應(yīng)用程序框架。在 PyQt5 中,QPushButton 是一個(gè)常用的控件,用于創(chuàng)建按鈕,允許用戶(hù)通過(guò)點(diǎn)擊來(lái)觸發(fā)某些操作。
用來(lái)給用戶(hù)點(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)閉等操作。用戶(hù)可以通過(guò)點(diǎn)擊按鈕來(lái)觸發(fā)一個(gè)事件或操作。

1.2 繼承關(guān)系

QPushButton 控件繼承自 QAbstractButton 類(lèi),這意味著它擁有 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 *  # 主要包含了我們常用的一些類(lèi), 匯總到了一塊
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)用戶(hù)的點(diǎn)擊操作。

btn.setEnabled(False) # 禁用按鈕

2.3 設(shè)置快捷鍵

QPushButton 支持設(shè)置快捷鍵,允許用戶(hù)通過(guò)鍵盤(pán)操作來(lái)觸發(fā)按鈕的點(diǎn)擊事件。使用 setShortcut() 方法設(shè)置快捷鍵。

btn.setShortcut('Ctrl+Q') # 設(shè)置快捷鍵為 Ctrl+Q

這個(gè)與其父類(lèi)QAbdtractButton用法一樣,略

在這里插入圖片描述

2.4 菜單設(shè)置

當(dāng)我們鼠標(biāo),點(diǎn)擊按鈕之后,可以展開(kāi)一系列的下拉菜單供我們選擇
當(dāng)我們創(chuàng)建菜單之后,用戶(hù)點(diǎn)擊按鈕,就會(huì)展示相關(guān)菜單
API介紹

在這里插入圖片描述

showMenu()指的是我們程序員可以通過(guò)代碼來(lái)控制按鈕來(lái)展示菜單

當(dāng)我們把鼠標(biāo)放在某菜單上面,會(huì)顯示出第二列,甚至第三列的菜單稱(chēng)為子菜單

在這里插入圖片描述

QMenu相關(guān)操作

在這里插入圖片描述

代碼展示:

# 0. 導(dǎo)入需要的包和模塊
from PyQt5.Qt import *  # 主要包含了我們常用的一些類(lèi), 匯總到了一塊
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)


# 子菜單 最近打開(kāi)
# open_recent_menu = QMenu(menu)
#設(shè)置子菜單標(biāo)題
# open_recent_menu.setTitle("最近打開(kāi)")

#一次性寫(xiě)全,創(chuàng)建子菜單
#QMenu(title: Optional[str], parent: Optional[QWidget] = None)
open_recent_menu = QMenu("最近打開(kāi)",menu)


# 行為動(dòng)作 新建  打開(kāi)  分割線 退出
# new_action = QAction()
# new_action.setText("新建")
# new_action.setIcon(QIcon("../../imgs/python-gui.png"))

#新建,一次性寫(xiě)全創(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("新建文件"))

#打開(kāi)
open_action = QAction(QIcon("xxx.png"), "打開(kāi)", menu)
open_action.triggered.connect(lambda: print("打開(kāi)文件"))

#退出程序
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)于用戶(hù)點(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 *  # 主要包含了我們常用的一些類(lèi), 匯總到了一塊
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ì)話(huà)框時(shí),默認(rèn)光標(biāo)所在的按鈕
例如如下所示,當(dāng)我們點(diǎn)擊打開(kāi)文件按鈕,會(huì)彈出一個(gè)對(duì)話(huà)框,此時(shí)鼠標(biāo)光標(biāo)會(huì)默認(rèn)落在 打開(kāi) 這個(gè)按鈕上

在這里插入圖片描述

默認(rèn)按鈕處理有自動(dòng)默認(rèn)處理和設(shè)置默認(rèn)
自動(dòng)默認(rèn)按鈕,指的是當(dāng)用戶(hù)點(diǎn)擊該按鈕,該按鈕就自動(dòng)的會(huì)被選中為默認(rèn)的
setDefault()是直接設(shè)置該按鈕為默認(rèn)按鈕

在這里插入圖片描述

默認(rèn)情況下,我們點(diǎn)擊按鈕,松開(kāi)后會(huì)恢復(fù)原樣

代碼展示:

# 0. 導(dǎo)入需要的包和模塊
from PyQt5.Qt import *  # 主要包含了我們常用的一些類(lèi), 匯總到了一塊
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)按鈕后,用戶(hù)再點(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() 是用戶(hù)點(diǎn)擊了,才設(shè)置為自動(dòng)默認(rèn)
如果想要一開(kāi)始就是默認(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 右鍵菜單

用戶(hù)用鼠標(biāo)右鍵點(diǎn)擊窗口后,彈出來(lái)的菜單
右鍵菜單實(shí)際上是通過(guò)發(fā)射信號(hào)來(lái)實(shí)現(xiàn)的
QPushbutton的信號(hào)都是繼承自父類(lèi)的
右鍵菜單實(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 *  # 主要包含了我們常用的一些類(lèi), 匯總到了一塊
import sys


#重寫(xiě)個(gè)窗口類(lèi),繼承QWidget,重寫(xiě)contextMenuEvent方法
class Window(QWidget):
    # 重寫(xiě)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 *  # 主要包含了我們常用的一些類(lèi), 匯總到了一塊
import sys


#重寫(xiě)個(gè)窗口類(lèi),繼承QWidget,重寫(xiě)contextMenuEvent方法
class Window(QWidget):
    # 重寫(xiě)contextMenuEvent方法,然后在該窗口下只要鼠標(biāo)右鍵,就會(huì)觸發(fā)該方法,執(zhí)行該方法中的邏輯
    # QContextMenuEvent
    def contextMenuEvent(self, evt):
        # print("在窗口中右鍵點(diǎn)擊鼠標(biāo)")

        # 創(chuàng)建菜單
        menu = QMenu(window)

        # 子菜單 最近打開(kāi)
        # open_recent_menu = QMenu(menu)
        # 設(shè)置子菜單標(biāo)題
        # open_recent_menu.setTitle("最近打開(kāi)")

        # 一次性寫(xiě)全,創(chuàng)建子菜單
        # QMenu(title: Optional[str], parent: Optional[QWidget] = None)
        open_recent_menu = QMenu("最近打開(kāi)", menu)

        # 行為動(dòng)作 新建  打開(kāi)  分割線 退出
        # new_action = QAction()
        # new_action.setText("新建")
        # new_action.setIcon(QIcon("../../imgs/python-gui.png"))

        # 新建,一次性寫(xiě)全創(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("新建文件"))

        # 打開(kāi)
        open_action = QAction(QIcon("xxx.png"), "打開(kāi)", menu)
        open_action.triggered.connect(lambda: print("打開(kāi)文件"))

        # 退出程序
        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 *  # 主要包含了我們常用的一些類(lèi), 匯總到了一塊
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)

    # 子菜單 最近打開(kāi)
    # open_recent_menu = QMenu(menu)
    # 設(shè)置子菜單標(biāo)題
    # open_recent_menu.setTitle("最近打開(kāi)")

    # 一次性寫(xiě)全,創(chuàng)建子菜單
    # QMenu(title: Optional[str], parent: Optional[QWidget] = None)
    open_recent_menu = QMenu("最近打開(kāi)", menu)

    # 行為動(dòng)作 新建  打開(kāi)  分割線 退出
    # new_action = QAction()
    # new_action.setText("新建")
    # new_action.setIcon(QIcon("../../imgs/python-gui.png"))

    # 新建,一次性寫(xiě)全創(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("新建文件"))

    # 打開(kāi)
    open_action = QAction(QIcon("xxx.png"), "打開(kāi)", menu)
    open_action.triggered.connect(lambda: print("打開(kāi)文件"))

    # 退出程序
    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ò)展話(huà)題和示例:

3. 按鈕樣式定制

PyQt5 允許你通過(guò)樣式表(QSS,類(lèi)似于 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)畫(huà)效果

雖然 PyQt5 本身不直接支持復(fù)雜的動(dòng)畫(huà)效果,但你可以使用 QPropertyAnimation 來(lái)為按鈕添加簡(jiǎn)單的動(dòng)畫(huà),如淡入淡出、大小變化等。

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
from PyQt5.QtCore import QPropertyAnimation, QRect, QPoint

app = QApplication([])
window = QWidget()

btn = QPushButton('動(dòng)畫(huà)效果', window)
btn.setGeometry(50, 50, 100, 40)

# 創(chuàng)建一個(gè)動(dòng)畫(huà)對(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()  # 開(kāi)始動(dòng)畫(huà)

btn.show()
window.show()
app.exec_()

在這個(gè)例子中,我們創(chuàng)建了一個(gè)動(dòng)畫(huà),使按鈕在屏幕上水平移動(dòng)。注意,這里使用了 QPropertyAnimationb"geometry" 屬性來(lái)指定要改變的屬性。

5. 按鈕的分組和禁用

在某些情況下,你可能需要將多個(gè)按鈕組合在一起,并允許用戶(hù)一次只能激活其中一個(gè)。雖然 PyQt5 沒(méi)有直接提供按鈕組的控件,但你可以通過(guò)編程方式實(shí)現(xiàn)這一功能。

此外,如果你需要禁用一組按鈕中的某些按鈕,可以遍歷這些按鈕并調(diào)用它們的 setEnabled(False) 方法。

6. 按鈕的自定義行為

除了基本的點(diǎn)擊事件外,你還可以為按鈕添加其他類(lèi)型的事件處理邏輯,如雙擊事件、長(zhǎng)按事件等。雖然 PyQt5 的 QPushButton 不直接支持雙擊和長(zhǎng)按事件,但你可以通過(guò)重寫(xiě)按鈕的某些方法或使用定時(shí)器來(lái)模擬這些行為。

7. 實(shí)際應(yīng)用中的按鈕設(shè)計(jì)

在開(kāi)發(fā)實(shí)際應(yīng)用程序時(shí),按鈕的設(shè)計(jì)應(yīng)該符合應(yīng)用程序的整體風(fēng)格和用戶(hù)體驗(yàn)。這包括按鈕的大小、顏色、位置、文本內(nèi)容以及圖標(biāo)的選擇。同時(shí),按鈕的響應(yīng)速度和反饋也是非常重要的,用戶(hù)應(yīng)該能夠清楚地知道他們的操作是否被系統(tǒng)識(shí)別和處理。

總結(jié)

QPushButton 是 PyQt5 中一個(gè)非常強(qiáng)大且靈活的控件,它允許你創(chuàng)建各種類(lèi)型的按鈕來(lái)滿(mǎn)足不同的需求。通過(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)文章

  • 把大數(shù)據(jù)數(shù)字口語(yǔ)化(python與js)兩種實(shí)現(xiàn)

    把大數(shù)據(jù)數(shù)字口語(yǔ)化(python與js)兩種實(shí)現(xiàn)

    當(dāng)出現(xiàn)萬(wàn)以上的整型數(shù)字時(shí),經(jīng)常要把它們口語(yǔ)化比較直觀。下面分享兩段代碼,python與js的
    2013-02-02
  • Python+PyQt5設(shè)計(jì)實(shí)現(xiàn)一個(gè)C++源代碼行數(shù)統(tǒng)計(jì)工具

    Python+PyQt5設(shè)計(jì)實(shí)現(xiàn)一個(gè)C++源代碼行數(shù)統(tǒng)計(jì)工具

    在軟件開(kāi)發(fā)過(guò)程中,代碼行數(shù)是一個(gè)基礎(chǔ)但重要的軟件度量指標(biāo),本文介紹一個(gè)基于PyQt5的圖形化C++源代碼行數(shù)統(tǒng)計(jì)工具,感興趣的小伙伴可以了解下
    2025-10-10
  • 利用Python對(duì)中國(guó)500強(qiáng)排行榜數(shù)據(jù)進(jìn)行可視化分析

    利用Python對(duì)中國(guó)500強(qiáng)排行榜數(shù)據(jù)進(jìn)行可視化分析

    這篇文章主要介紹了利用Python對(duì)中國(guó)500強(qiáng)排行榜數(shù)據(jù)進(jìn)行可視化分析,從不同角度去對(duì)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析,可視化展示,下文詳細(xì)內(nèi)容介紹需要的小伙伴可以參考一下
    2022-05-05
  • Python數(shù)據(jù)容器dict(字典)的實(shí)現(xiàn)

    Python數(shù)據(jù)容器dict(字典)的實(shí)現(xiàn)

    本文主要介紹了Python數(shù)據(jù)容器dict(字典)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • python3.3實(shí)現(xiàn)乘法表示例

    python3.3實(shí)現(xiàn)乘法表示例

    這篇文章主要介紹了python3.3實(shí)現(xiàn)乘法表示例,需要的朋友可以參考下
    2014-02-02
  • django數(shù)據(jù)庫(kù)自動(dòng)重連的方法實(shí)例

    django數(shù)據(jù)庫(kù)自動(dòng)重連的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于django數(shù)據(jù)庫(kù)自動(dòng)重連的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用django具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python源碼加密與Pytorch模型加密分別介紹

    Python源碼加密與Pytorch模型加密分別介紹

    在實(shí)際的工作中,有時(shí)候我們需要部署自己的Python應(yīng)用,但這時(shí)候我們并不希望別人能夠看到自己的Python源程序。因此,我們需要為自己的源代碼進(jìn)行加密,Python已經(jīng)為我們提供了這樣一套工作機(jī)制
    2022-12-12
  • Pyspark獲取并處理RDD數(shù)據(jù)代碼實(shí)例

    Pyspark獲取并處理RDD數(shù)據(jù)代碼實(shí)例

    這篇文章主要介紹了Pyspark獲取并處理RDD數(shù)據(jù)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 詳解pandas賦值失敗問(wèn)題解決

    詳解pandas賦值失敗問(wèn)題解決

    這篇文章主要介紹了詳解pandas賦值失敗問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Python自動(dòng)提取項(xiàng)目中導(dǎo)入的庫(kù)及其版本信息

    Python自動(dòng)提取項(xiàng)目中導(dǎo)入的庫(kù)及其版本信息

    在我們有時(shí)需要遷移或部署項(xiàng)目時(shí),需要知道項(xiàng)目所依賴(lài)的三方包和版本,本文就來(lái)介紹一下Python自動(dòng)提取項(xiàng)目中導(dǎo)入的庫(kù)及其版本信息,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03

最新評(píng)論

西乌珠穆沁旗| 留坝县| 广德县| 珲春市| 定南县| 克拉玛依市| 双柏县| 木里| 墨玉县| 鄂温| 玛多县| 景德镇市| 马鞍山市| 阳城县| 高州市| 砀山县| 浙江省| 古丈县| 甘肃省| 土默特左旗| 高雄县| 循化| 中宁县| 宁海县| 崇仁县| 大同县| 陈巴尔虎旗| 泸溪县| 福州市| 论坛| 蒲城县| 浏阳市| 安国市| 东城区| 扶绥县| 丰原市| 云阳县| 远安县| 青州市| 容城县| 南昌县|