Ваш код имеет много несоответствий, например:
def Clicked(self,item):
click_id = self.item.text()
Я предполагаю, что этот метод должен возвращать текст элемента, но эта функция ничего не возвращает, поэтому, даже если он вызывается правильно, вы будете всегда получают None.
class myTextWidget(QLineEdit):
def change_text(self):
click_id = myListWidget.Clicked
self.setText = item_dict[click_id]
Вы пытаетесь использовать myListWidget.Clicked, но это никогда не сработает, потому что для использования метода вам нужен объект, кроме того, чтобы вызывать функцию, вы должны использовать круглые скобки и при необходимости передавать аргументы.
Исходя из вышесказанного, я предполагаю, что вы не обладаете знаниями о OOP, поэтому рекомендуется просмотреть ваши заметки по этому вопросу, поскольку Qt интенсивно их использует.
Поэтому код должен быть переписан. Когда вы добавляете элементы в QListWidget, вы конвертируете в строку, и когда вы извлекаете ее, она также будет строкой, поэтому ее нельзя будет использовать для доступа к связанному значению словаря, поэтому, чтобы избежать этого преобразования, вы можете использовать Qt :: DisplayRole роль, так что покажет номера и значения будут получены в виде числа. С другой стороны, никогда не предполагайте, что все работает правильно, но вы должны проверить, например, вместо того, чтобы использовать «[]», вы можете использовать «get ()», в первом случае, если ключ не существует, будет выдано исключение. а во втором будет возвращено None или значение по умолчанию. Учитывая вышеизложенное, решение выглядит следующим образом:
import sys
from PySide2 import QtCore, QtGui, QtWidgets
item_dict = {1: "First Item", 2: "Second Item", 3: "Third Item"}
item_list = [1, 2, 3]
class Widget(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
self.listwidget = QtWidgets.QListWidget()
self.lineedit = QtWidgets.QLineEdit()
lay = QtWidgets.QVBoxLayout(self)
lay.addWidget(self.listwidget)
lay.addWidget(self.lineedit)
for e in item_list:
it = QtWidgets.QListWidgetItem()
it.setData(QtCore.Qt.DisplayRole, e)
self.listwidget.addItem(it)
self.listwidget.itemClicked.connect(self.on_item_clicked)
@QtCore.Slot(QtWidgets.QListWidgetItem)
def on_item_clicked(self, item):
key = item.data(QtCore.Qt.DisplayRole)
value = item_dict.get(key)
if value is not None:
self.lineedit.setText(value)
def main():
app = QtWidgets.QApplication(sys.argv)
window = Widget()
window.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()