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

此按钮的单击信号连接到成员方法 btnstate(),该方法通过检查 isChecked() 属性来识别按钮是按下还是释放。

def btnstate(self):
   if self.b1.isChecked():
      print "button pressed"
   else:
      print "button released"

Second button b2 displays an icon on the face. setIcon() method takes a pixmap object of any image file as argument.

b2.setIcon(QIcon(QPixmap("python.gif")))

使用 setEnabled() 方法将按钮 b3 设置为禁用 −

b3.setEnabled(False)

PushButton b4 通过 setDefault() 方法设置为默认按钮。 其标题的快捷方式是通过在标题前加上前缀 &(&Default)来创建的。 因此,通过使用键盘组合 Alt+D,将调用连接的插槽方法。

按钮 b1 和 b4 连接到 whichbtn() 插槽方法。 由于该函数旨在检索单击按钮的标题,因此应将按钮对象作为参数传递。 这是通过使用 lambda 函数来实现的。

例如,

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

完整的代码如下 −

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui 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 小部件输出
clicked button is Button1
button released
clicked button is Button1
button pressed
clicked button is &Default