2016-08-02 50 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

相关问题