PyQt5 - QPushButton 控制元件



在任何 GUI 設計中,命令按鈕是最重要和最常用的控制元件。帶有“儲存”、“開啟”、“確定”、“是”、“否”和“取消”等標題的按鈕對任何計算機使用者都很熟悉。在 PyQt API 中,QPushButton 類物件表示一個按鈕,單擊該按鈕可以程式設計為呼叫某個函式。

QPushButton 類繼承其核心功能自 QAbstractButton 類。它呈矩形,其表面可以顯示文字標題或圖示。

以下是 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)

按鈕 b4 透過 setDefault() 方法設定為預設按鈕。透過在標題前新增 & 來建立其標題的快捷鍵(&Default)。因此,使用鍵盤組合 Alt+D 將呼叫連線的槽方法。

按鈕 b1 和 b4 連線到 whichbtn() 槽方法。由於該函式旨在檢索被單擊按鈕的標題,因此應將按鈕物件作為引數傳遞。這是透過使用 lambda 函式實現的。

例如:

b4.clicked.connect(lambda:self.whichbtn(self.b4))

完整的程式碼如下:

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

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()

輸出

以上程式碼產生以下輸出。

QPushButton Widget Output
clicked button is Button1
button released
clicked button is Button1
button pressed
clicked button is &Default
pyqt_basic_widgets.htm
廣告
© . All rights reserved.