【发布时间】:2020-03-02 15:54:43
【问题描述】:
我有一个带有 QListWidget 的 GUI,它以没有条目开头。使用“添加”按钮添加条目。我遇到的问题是,当您编辑列表项的文本时,如果您在按 Enter 或单击离开之前再次单击添加按钮,您输入的文本将被删除(参见 gif 以供参考)
另外,另一个 gif 显示代码在其他方面可以正常工作:
问题在于它不会保存您在每次击键时输入的内容。相反,它会等到您完成并更改选择或按下回车键。
谁能提出解决这个问题的方法?
代码:
我在我的 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)
【问题讨论】:
标签: python pyqt pyqt5 qlistwidget