pyqt组件点击事件(其他事件也一样)传递参数

是这样,做项目的时候需要对多个组件共用一个方法,这个时候就有一个问题,如何去辨别每次触发这个方法的是哪个组件。

常规的方式是通过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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章