是这样,做项目的时候需要对多个组件共用一个方法,这个时候就有一个问题,如何去辨别每次触发这个方法的是哪个组件。
常规的方式是通过self.sender()方法来获取触发源是谁。然后通过触发源的text属性内容的不同来区分。比如:
def setColor(self, pressed):
source = self.sender()
if pressed:
val = 255
else: val = 0
if source.text() == "Red":
self.col.setRed(val)
elif source.text() == "Green":
self.col.setGreen(val)
else:
self.col.setBlue(val)
self.square.setStyleSheet("QFrame { background-color: %s }" %
self.col.name())
但是笔者认为这种方式的对整个系统都是不稳定的成分,为什么呢,因为text属性本身就是一个可变的参数,而且变化的概率还很大,所以就想能不能找到一个类似html里头dom元素设置id这种的方式。翻看了一圈,还没发现。最后曲线救国,就是触发方法的时候传递一个标识参数,通过参数的不同来判断是谁触发的。如下:
1、使用lambda修饰符(因为传参了,需要加上括号,在python里头就是表示立刻运行这个方法,所以必须加上lambda:来避免这种情况),连接信号
self.pushButton.clicked.connect(lambda:self.buttonClicked(1,1))
2、定义方法
def buttonClicked(self,p1,p2):
pass