在上一篇学习笔记中,我们重构了 ESC 和 ALT 键按下时触发的信号槽过程,在本次笔记中我们可以自己决定在什么时候发送一个信号。本文由 Cescfangs 译自 ZetCode pyqt5系列教程 并作适当修改。
在本次的学习笔记中,我们将通过信号槽的绑定,在statusBar()
中提示哪一个按钮被按下了,先上源代码:
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton
class exp(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(400, 400, 300, 300)
self.setWindowTitle('sender')
btn1 = QPushButton('Hello', self)
btn2 = QPushButton('world', self)
btn1.move(30, 150)
btn2.move(150, 150)
self.statusBar()
btn1.clicked.connect(self.btnclicked)
btn2.clicked.connect(self.btnclicked)
def btnclicked(self):
sender = self.sender()
self.statusBar().showMessage(sender.text() + ' was clicked!')
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
ex = exp()
ex.show()
sys.exit(app.exec_())
通过以上的代码,我们创建了 'hello' 和 'world' 两个按钮,'hello' 按下的时候,左下角会提示 'hello was clicked!','world'按下的时候则提示 'world was clicked!'。
def btnclicked(self):
sender = self.sender()
self.statusBar().showMessage(sender.text() + ' was clicked!')
自定义的槽函数 btnclicked
,它的作用是设置 statusBar()
的内容为按钮文本+ 'was clicked!',这个函数通过:
btn1.clicked.connect(self.btnclicked)
btn2.clicked.connect(self.btnclicked)
进行连接呈现,发送的信号传送到槽函数时,我们可以使用 sender()
来判断是哪个部件发送了信号,从而做出对应的反馈,这也是自定义槽函数里经常使用的一个技巧。