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)
PushButton 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()
输出
上面的代码生成以下输出结果。
clicked button is Button1
button released
clicked button is Button1
button pressed
clicked button is &Default