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()
以上代码产生以下输出。
clicked button is Button1 button released clicked button is Button1 button pressed clicked button is &Default