У меня есть графический интерфейс с QListWidget, который начинается без записей. Записи добавляются с помощью кнопки «Добавить». У меня проблема в том, что когда вы редактируете текст элемента списка, если вы нажимаете кнопку «Добавить» еще раз, прежде чем нажать «Ввод» или «Уход», введенный вами текст стирается (см. Рисунок в формате gif)
Кроме того, еще один gif, чтобы показать, что код работает иначе:
Проблема в том, что он не сохраняет то, что вы печатаете с каждымнажатие клавиши. Вместо этого он ожидает, пока вы не закончите и не измените выбор или не нажмете клавишу ввода.
Может кто-нибудь предложить способ исправить это?
Код:
У меня есть следующие сигналы, объявленные в функции init моего класса GUI:
self.w_client_list.itemChanged.connect(self.edit_client_name)
self.w_client_list.itemSelectionChanged.connect(self.switching_clients)
self.b_add_client.clicked.connect(self.add_client)
Это функции слотов, к которым подключены сигналы:
def get_index(self):
"""Gets index number of selected client for client details functions"""
for i in range(self.w_client_list.count()):
if self.w_client_list.item(i).isSelected():
index = i
return index
index = None
return index
@Slot()
def switching_clients(self):
index = self.get_index()
if index == None:
self.l_email.clear()
self.c_main_email.setCheckState(Qt.Unchecked)
self.c_secondary_email.setCheckState(Qt.Unchecked)
self.w_phone.clear()
self.l_preferred_name.clear()
self.w_title.setCurrentText('Mr')
else:
# Email
self.l_email.setText(self.client.individual[index]['email'][0])
self.c_main_email.setChecked(self.client.individual[index]['email'][1])
self.c_secondary_email.setChecked(self.client.individual[index]['email'][2])
# Phone
self.update_phone_list()
# Preferred Name
self.l_preferred_name.setText(self.client.individual[index]['preferred_name'])
# Title
self.w_title.setCurrentText(self.client.individual[index]['title'])
@Slot()
def edit_client_name(self):
index = self.get_index()
self.client.individual[index]['full_name'] = self.w_client_list.item(index).text().strip()
self.switching_clients()
@Slot()
def add_client(self):
self.client.individual.append({'title': 'Mr', 'first_name': '', 'middle_name': '', 'last_name': '',
'full_name': 'Enter full name',
'preferred_name': '', 'salutation': '', 'postal_salutation': '',
'email': ['', 0, 0], 'address': [], 'phone': [],
'preferred_name_connected': True})
self.update_client_list() # Updates the client form to show new address row
def update_client_list(self):
self.w_client_list.clear()
client_list = []
for client in self.client.individual:
item = QtWidgets.QListWidgetItem()
item.setText(client['full_name'])
item.setFlags(
QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled)
self.w_client_list.addItem(item)
item.setSelected(True)