我有一个带有QListWidget且没有任何条目的GUI。使用“添加”按钮添加条目。我遇到的问题是,当您编辑列表项的文本时,如果在单击Enter或单击离开之前再次单击添加按钮,则输入的文本将被删除(请参阅gif以供参考)
另外,还有一个gif显示代码可以正常工作:
问题是,它不会保存您每次击键输入的内容。而是等到您完成操作并更改选择或按Enter键。
任何人都可以建议解决此问题的方法吗?
代码:
我在GUI类的init函数中声明了以下信号:
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)
我要做的是,当用户单击“添加”时,程序首先通过比较“旧”字符串来验证条目是否已更改。和新的。如果是这样,它将保存新的字符串并将其设置为小部件。否则,它将仅添加新条目。我希望这可以引导您找到解决方案。