问题描述
我有一个pyqt5应用程序,该应用程序允许创建窗口对象的实例。每个窗口都有一个qlineedit和两个标签。目的是使用在qline编辑中键入的文本填充标签。如果在类中使用连接到函数的连接,则这很简单。
def onChanged(self,text):
self.lable1.setText(text)
但是对于label2,我想将在qline编辑框中输入的文本传输到外部python函数,然后让该函数将文本回显到发送它的窗口中的label2。
我可以使用信号和插槽将文本从gui中提取出来,并导入到称为updater的函数中。我已经设法从“自我”中识别出对象的来源(父母),但无法弄清楚如何使用它来将文本映射到正确的标签实例。如果我知道实例,则很容易填充标签,但是在动态创建和销毁窗口时会遇到困难。感谢收到任何建议。
下面列出:
import sys
from PyQt5.QtWidgets import (QLabel,QLineEdit,QVBoxLayout)
from PyQt5.QtCore import QObject,pyqtSignal,pyqtSlot
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication
class Window(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
hBox = QVBoxLayout(self)
self.lable1 = QLabel(self)
self.lable2 = QLabel(self)
qle1 = QLineEdit(self)
#qle2 = QLineEdit(self)
qle1.textChanged[str].connect(self.onChanged)
#qle2.textChanged[str].connect(self.onChanged)
hBox.addWidget(qle1)
#hBox.addWidget(qle2)
hBox.addWidget(self.lable1)
hBox.addWidget(self.lable2)
self.resize(250,200)
self.setwindowTitle('QLineEdit')
self.show()
def onChanged(self,text):
self.lable1.setText(text)
#self.lable2.setText(text)
print("Parent of onChanged = ",self)
parent = str(self)
sentBy = str(self.sender())
updater1.updateSignal.emit(text,parent)
def onChangedExternal(self,text):
print("Parent of onChangedExternal = ",self)
self.lable2.setText(text)
# define a new slot that receives an update string and the
# "address" of the widget to which the updated string should be returned
@pyqtSlot(str,str)
def update_something(stuff,From):
echo = f'{str(From)}.onChangedExternal({stuff})'
print("Echo : ",echo)
#wina.onChangedExternal(stuff) #Need generalised way to call this function with winx!
class Updater(QObject):
# create a new signal to handle strings
updateSignal = pyqtSignal(str,str)
#instantiate Updater
updater1 = Updater()
# connect signal to slot
updater1.updateSignal.connect(update_something)
if __name__ == "__main__":
app = QApplication(sys.argv)
wina = Window()
winb = Window()
print(wina,winb)
sys.exit(app.exec_())
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)