2016-08-02 22 views
1

我有兩個按鈕,我想將它連接到標籤以查看文本。Pyqt兩個按鈕連接到方法來設置標籤中的文本

在__init__method我有:

self.pushButton.clicked.connect(self.labeltext) 
self.pushButton_2.clicked.connect(self.labeltext) 

def labeltext(self): 
    if self.pushButton.clicked: 
     self.label.setText('A') 
    elif self.pushButton_2.clicked: 
     self.label.setText('B') 

的問題是,如果我按一下按鈕二號,它的標籤文本爲「A」,這是按鈕下定義。

回答

1

可以使用sender()方法:單擊各個按鈕時

First open

標籤將改變爲此:

def labeltext(self): 
    sender = self.sender() 
    if sender is self.pushButton: 
     self.label.setText('A') 
    elif sender is self.pushButton_2: 
     self.label.setText('B') 
+0

謝謝。出於某種原因,我在python ide中中止(斷開)消息 – michigansqllite123

1

如果你使用functools.partial,你可以像下面那樣替換連接線。你也可以通過添加一個字符串參數來簡化labeltext函數,這個參數是在按下按鈕時傳遞的。

def labeltext(self, text): 
    self.label.setText(text) 

self.pushButton.clicked.connect(partial(self.labeltext, 'A')) 
self.pushButton_2.clicked.connect(partial(self.labeltext, 'B')) 

如果你不喜歡functools.partial,你也可以使用拉姆達如下:

self.pushButton_2.clicked.connect(lambda: self.labeltext('B')) 
+0

謝謝,部分是好的,謝謝 – michigansqllite123

1

您可以通過使用partial做到這一點。

使用partial,您將傳遞您想顯示在​​.connect()中的文字。

qbtn1.clicked.connect(partial(self.labeltext, "A")) 
qbtn2.clicked.connect(partial(self.labeltext, "B")) 

你也將需要調整labeltext函數簽名接受你希望顯示的文本。

def labeltext(self, text) 

,而不是標準

def labeltext(self) 

一個完整的演示看起來像這樣(從zetcode借來的快速樣本代碼):

import sys 
from PyQt4 import QtGui, QtCore 
from functools import partial 

class Example(QtGui.QWidget): 

    def __init__(self): 
     super(Example, self).__init__() 
     self.initUI() 

    def initUI(self):  
     self.lbl = QtGui.QLabel(self) 
     qbtn1 = QtGui.QPushButton('Set "A"', self) 
     qbtn2 = QtGui.QPushButton('Set "B"', self) 

     self.lbl.move(20, 100) 
     qbtn1.move(20,40) 
     qbtn2.move(20,60) 

     qbtn1.clicked.connect(partial(self.labeltext, "A")) 
     qbtn2.clicked.connect(partial(self.labeltext, "B"))  
     self.setGeometry(300, 300, 280, 170) 
     self.setWindowTitle('Demo') 
     self.show() 

    def labeltext(self, text):  
     self.lbl.setText(text) 
     self.lbl.adjustSize()  


def main(): 
    app = QtGui.QApplication(sys.argv) 
    ex = Example() 
    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main() 

公告我們正在調用的函數現在需要兩個參數selftext

當應用程序第一次啓動時,標籤是空的:

Clicked AClicked B

+0

謝謝你這個工作。 – michigansqllite123

相關問題