例子
四个 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() 方法设置为禁用 -
按钮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()