Pyqt 两个按钮连接到标签中设置文本的方法
Pyqt two buttons connect to method to set text in label
我有两个按钮,我想将它连接到标签以查看文本。
在__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" 标记文本,这是在按钮下定义的。
如果你使用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'))
您可以使用 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
现在有两个参数 - self
和 text
。
应用程序首次启动时,标签为空:
点击每个按钮时标签会发生变化:
您可以使用 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')
我有两个按钮,我想将它连接到标签以查看文本。
在__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" 标记文本,这是在按钮下定义的。
如果你使用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'))
您可以使用 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
现在有两个参数 - self
和 text
。
应用程序首次启动时,标签为空:
点击每个按钮时标签会发生变化:
您可以使用 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')