重点是将一些组件触发后的slot设置成相同的,然后可以通过sender区分开,用简单的if可以实现对这些所有组件的不同处理方式。
代码:
# coding='utf-8'
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QPushButton
class Gui(QMainWindow):
def __init__(self):
super(Gui, self).__init__()
self.start()
def start(self):
# 创建一些放置在QWidget上的按钮
buttons = [
QPushButton('button 1', self),
QPushButton('button 2', self),
]
# 给所有的按钮按照绝对坐标移动到相应的位置
buttons[0].move(30, 50)
buttons[1].move(150, 50)
# 给所有按钮在点击后绑定相同的事件
# 这里的signal时clicked, slot时self.button_clicked
buttons[0].clicked.connect(self.button_clicked)
buttons[1].clicked.connect(self.button_clicked)
# 实例化左下角显示的状态栏对象,设置成类属性是为了在\
# 类的不同方法之间通信
self.statusBar()
self.setGeometry(300, 300, 290, 150)
self.setWindowTitle('Event sender')
self.show()
# 按下按钮后触发的事件,也可以叫slot
def button_clicked(self):
# 实例化一个sender对象,通过sender对象,\
# 我们可以 determine the signal source,
# 也就是找出信号源(哪个组件状态变化而发出信号)
sender = self.sender()
# 类属性通信,在左下角显示哪个按钮被按了
self.statusBar().showMessage('{} 被按下了.'.format(sender.text()))
win = QApplication(sys.argv)
gui = Gui()
sys.exit(win.exec_())
运行结果:
image.png
网友评论