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

 

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