Pyqt两个按钮连接到标签中设置文本的方法

时间:2016-08-02 11:25:54

标签: python pyqt5

我有两个按钮,我想将它连接到标签上以查看文字。

在__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"标记文字,这是在按钮下定义的。

3 个答案:

答案 0 :(得分: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,你也可以按如下方式使用lambda:

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

答案 1 :(得分: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()

请注意,我们调用的函数labeltext现在有两个参数 - selftext

首次启动应用程序时,标签为空:

First open

单击每个按钮时标签会发生变化:

Clicked A Clicked B

答案 2 :(得分:1)

您可以使用sender()方法:

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')
相关问题