如何在正确的 PyQt5 QLineEdit 中更新所选项目?

How to update selected item in the proper PyQt5 QLineEdit?

如何在正确的QLineEdit中更新选中的项目? 3 个文本框,由各种数据集填充。如果我点击 QListWidget 中的一些项目,每次第一次 QLineedit 只更新。而不是这个,我想更新数据到相应的 QLineEdits。 (例如:如果 textbox1 获得焦点,则所选项目将在 textbox1 中更新。如果 textbox2 获得焦点,则所选项目将在 textbox2 中更新)。但在我的例子中,每次 textbox1 只更新。

import sys

from PyQt5 import QtWidgets
from Whosebug_file_002 import *

data_1 = ["America","India","Russia","Brazil","Swden","China"]
data_2 = ["Apple","Mango","Grapes","Pine","Berry","Banana"]
data_3 = ["item001","item002","item003","item,004","item005","item006"]

class Example(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Example")
        self.tb1 = QtWidgets.QLineEdit()
        self.tb1.setObjectName("tb1")
        self.tb2 = QtWidgets.QLineEdit()
        self.tb2.setObjectName("tb2")
        self.tb3 = QtWidgets.QLineEdit()
        self.tb3.setObjectName("tb3")
        self.lb1 = QtWidgets.QListWidget()

        self.vbox = QtWidgets.QVBoxLayout()
        self.hbox = QtWidgets.QHBoxLayout()
        self.vbox.addWidget(self.tb1)
        self.vbox.addWidget(self.tb2)
        self.vbox.addWidget(self.tb3)
        self.hbox.addLayout(self.vbox)
        self.hbox.addWidget(self.lb1)
        self.setLayout(self.hbox)

        QtWidgets.QApplication.instance().focusChanged.connect(self.on_focusChanged)

    def on_focusChanged(self):
        fwidget = QtWidgets.QApplication.focusWidget()
        if fwidget is not None:
            focus_widget_name = (fwidget.objectName())

            if focus_widget_name == "tb1":
                self.lb1.clear()
                self.lb1.addItems(data_1)
                self.getdetails_1 = My_File(self.tb1, self.lb1)

            if focus_widget_name == "tb2":
                self.lb1.clear()
                self.lb1.addItems(data_2)
                self.getdetails_1 = My_File(self.tb2, self.lb1)

            if focus_widget_name == "tb3":
                self.lb1.clear()
                self.lb1.addItems(data_3)
                self.getdetails_1 = My_File(self.tb3, self.lb1)

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    win = Example()
    win.show()
    sys.exit(app.exec_())

第二个文件

from PyQt5 import QtWidgets

class My_File(QtWidgets.QWidget):
    def __init__(self,textbox,listbox):
        super().__init__(listbox)
        self.tbox = textbox
        self.lbox = listbox
        self.lbox.clicked.connect(self.getvalue)

    def getvalue(self):
        self.selected_item = self.lbox.currentItem()
        if self.selected_item is not None:
            self.tbox.setText(self.selected_item.text())
            self.tbox.setFocus()
            return True

您正在将同一个列表框的同一个实例再次传递给 MyFile 构造函数,并一次又一次地连接 listBox clicked 信号,但连接信号仅在第一次有效,因此如果是,则需要断开连接已经连接上了,如果连接上了先尝试断开信号:

class My_File(QtWidgets.QWidget): 
    def __init__(self,textbox,listbox):
        super().__init__(listbox)
        self.tbox = textbox
        self.lbox = listbox
        try: 
            self.lbox.disconnect()
        except: 
            pass
        self.lbox.clicked.connect(self.getvalue)

一旦你这样做,一切都会很好。