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()
    
    
    此按钮的单击信号连接到成员方法 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 小部件输出
    
    
    clicked button is Button1
    
    button released
    
    clicked button is Button1
    
    button pressed
    
    clicked button is &Default