如何在正确的 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)
一旦你这样做,一切都会很好。
如何在正确的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)
一旦你这样做,一切都会很好。