- PyQt 教程
- PyQt - 首頁
- PyQt - 簡介
- PyQt - 環境搭建
- PyQt - Hello World
- PyQt - 主要類
- PyQt - 使用 Qt Designer
- PyQt - 元物件
- PyQt 訊號與槽
- PyQt - 訊號和槽
- PyQt - 支援和訊號
- PyQt - 未繫結和已繫結訊號
- PyQt - 使用 PyQtSignal 建立新的訊號
- PyQt - 連線、斷開和發射訊號
- PyQt - 槽裝飾器
- PyQt - 槽連線
- PyQt 佈局
- PyQt - 佈局管理
- PyQt - QBoxLayout
- PyQt - QGridLayout
- PyQt - QFormLayout
- PyQt - QHBoxLayout
- PyQt - QVBoxLayout
- PyQt - QStackedLayout
- PyQt - QGraphicsGridLayout
- PyQt - QGraphicsAnchorLayout
- PyQt - QGraphicsLayout
- PyQt - QGraphicsLinearLayout
- PyQt 基本控制元件
- PyQt - 基本控制元件
- PyQt - QLabel 控制元件
- PyQt - QLineEdit 控制元件
- PyQt - QPushButton 控制元件
- PyQt - QRadioButton 控制元件
- PyQt - QCheckBox 控制元件
- PyQt - QComboBox 控制元件
- PyQt - QSpinBox 控制元件
- PyQt - QMessageBox
- PyQt - QDialogButtonBox 控制元件
- PyQt - QFontComboBox 控制元件
- PyQt - QDoubleSpinBox 控制元件
- PyQt - QToolBox 控制元件
- PyQt - QDialog 類
- PyQt - QMessageBox
- PyQt - 多文件介面
- PyQt - 拖放
- PyQt 繪圖 API
- PyQt - 繪圖 API
- PyQt 資料庫
- PyQt - 資料庫操作
- PyQt 核心知識
- PyQt - BrushStyle 常量
- PyQt - QClipboard
- PyQt - QPixmap 類
- PyQt 有用資源
- PyQt - 快速指南
- PyQt - 有用資源
- PyQt - 討論
PyQt - QPushButton 控制元件
在任何 GUI 設計中,命令按鈕是最重要和最常用的控制元件。帶有“儲存”、“開啟”、“確定”、“是”、“否”和“取消”等標題的按鈕對任何計算機使用者都很熟悉。在 PyQt API 中,QPushButton 類物件表示一個按鈕,單擊該按鈕可以程式設計為呼叫某個函式。
繼承關係圖
QPushButton 類繼承其核心功能自 QAbstractButton 類,後者又繼承自 QWidgets 類。命令按鈕是矩形的,通常顯示描述其操作的文字標籤。它還可以使用文字中的&符號指定快捷鍵,從而啟用鍵盤啟用。
示例
button = QPushButton("&Download", self)
在上例中,如果我們按下 Alt+D,則按鈕將被啟用。
QPushButton 的工作原理
QPushButton 可以顯示文字標籤和圖示。我們可以在初始化期間設定按鈕的這些屬性,或者稍後使用 setText() 和 setIcon() 等方法修改它們。當按鈕被停用時,文字和圖示的外觀會調整以指示按鈕處於停用狀態。
QPushButton 在透過滑鼠、空格鍵或鍵盤快捷鍵啟用時會發出 clicked() 訊號。此訊號連線到執行按鈕的相關操作。此外,它還提供 pressed() 和 released() 等訊號,用於不太常見的用例。
在對話方塊中,命令按鈕設定為自動預設按鈕,即當它們接收鍵盤焦點時,它們會自動成為預設按鈕。當用戶在對話方塊中按下 Enter 或 Return 鍵時,將啟用預設按鈕。可以使用 setAutoDefault() 自定義此行為。
QPushButton 的用法
推送按鈕可用於透過使用者互動觸發的操作,例如“應用”、“取消”或“幫助”。按鈕具有寬矩形形狀和文字標籤。對於改變視窗狀態的小型方形按鈕,工具按鈕 (QToolButton) 更為合適。
變體和自定義
QPushButton 提供各種自定義選項,包括切換行為 (setCheckable())、自動重複功能 (setAutoRepeat()) 和控制按鈕外觀。它支援不同的狀態,例如可用或不可用,標準按鈕或選單按鈕,開啟或關閉(用於切換按鈕),預設或普通,自動重複或不自動重複,以及按下或未按下。
QPushButton 類的常用方法
以下是 QPushButton 類的一些最常用的方法:
| 序號 | 方法及描述 |
|---|---|
| 1 |
setCheckable() 如果設定為 true,則識別按鈕的按下和釋放狀態 |
| 2 |
toggle() 在可選中狀態之間切換 |
| 3 |
setIcon() 顯示由影像檔案的畫素圖形成的圖示 |
| 4 |
setEnabled() 設定為 false 時,按鈕將被停用,因此單擊它不會發出訊號 |
| 5 |
isChecked() 返回按鈕的布林狀態 |
| 6 |
setDefault() 將按鈕設定為預設按鈕 |
| 7 |
setText() 以程式設計方式設定按鈕的標題 |
| 8 |
text() 檢索按鈕的標題 |
示例
四個 QPushButton 物件設定了一些上述屬性。該示例以面向物件的形式編寫,因為需要將事件源作為引數傳遞給槽函式。
四個 QPushButton 物件在類中定義為例項變數。第一個按鈕 b1 透過以下語句轉換為切換按鈕:
self.b1.setCheckable(True) self.b1.toggle()
此按鈕的 clicked 訊號連線到成員方法 btnstate(),該方法透過檢查 isChecked() 屬性來識別按鈕是按下還是釋放。
def btnstate(self):
if self.b1.isChecked():
print "button pressed"
else:
print "button released"
第二個按鈕 b2 在表面上顯示一個圖示。setIcon() 方法採用任何影像檔案的畫素圖物件作為引數。
b2.setIcon(QIcon(QPixmap("python.gif")))
按鈕 b3 使用 setEnabled() 方法設定為停用:
b3.setEnabled(False)
PushButton b4 透過 setDefault() 方法設定為預設按鈕。其標題的快捷鍵是透過在標題前新增 & 建立的 (&Default)。結果,透過使用鍵盤組合 Alt+D,將呼叫連線的槽方法。
按鈕 b1 和 b4 連線到 whichbtn() 槽方法。由於該函式旨在檢索被單擊按鈕的標題,因此應將按鈕物件作為引數傳遞。這是透過使用 lambda 函式實現的。
例如:
b4.clicked.connect(lambda:self.whichbtn(self.b4))
完整的程式碼如下:
import sys
from PyQt6.QtCore import *
from PyQt6.QtGui import *
from PyQt6.QtWidgets import QDialog,QApplication, QPushButton,QVBoxLayout
class Form(QDialog):
def __init__(self, parent=None):
super(Form, self).__init__(parent)
layout = QVBoxLayout()
self.b1 = QPushButton("Button1")
self.b1.setCheckable(True)
self.b1.toggle()
self.b1.clicked.connect(lambda:self.whichbtn(self.b1))
self.b1.clicked.connect(self.btnstate)
layout.addWidget(self.b1)
self.b2 = QPushButton()
self.b2.setIcon(QIcon(QPixmap("python.gif")))
self.b2.clicked.connect(lambda:self.whichbtn(self.b2))
layout.addWidget(self.b2)
self.setLayout(layout)
self.b3 = QPushButton("Disabled")
self.b3.setEnabled(False)
layout.addWidget(self.b3)
self.b4 = QPushButton("&Default")
self.b4.setDefault(True)
self.b4.clicked.connect(lambda:self.whichbtn(self.b4))
layout.addWidget(self.b4)
self.setWindowTitle("Button demo")
def btnstate(self):
if self.b1.isChecked():
print ("button pressed")
else:
print ("button released")
def whichbtn(self,b):
print ("clicked button is "+b.text())
def main():
app = QApplication(sys.argv)
ex = Form()
ex.show()
sys.exit(app.exec())
if __name__ == '__main__':
main()
輸出
以上程式碼產生以下輸出。
clicked button is Button1 button released clicked button is Button1 button pressed clicked button is &Default
示例:帶有選單的 QPushButton
讓我們建立一個帶有選單選項的 QPushButton。
import sys
from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QMenu
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
btn = QPushButton('Menu', self)
menu = QMenu(self)
menu.addAction('Option 1')
menu.addAction('Option 2')
btn.setMenu(menu)
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('Menu QPushButton')
self.show()
def main():
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec())
if __name__ == '__main__':
main()
輸出
以上程式碼產生以下結果: