添加新项目时如何避免QListWidget列表项目被重置?

问题描述 投票:0回答:1

我有一个带有QListWidget且没有任何条目的GUI。使用“添加”按钮添加条目。我遇到的问题是,当您编辑列表项的文本时,如果在单击Enter或单击离开之前再次单击添加按钮,则输入的文本将被删除(请参阅gif以供参考)

https://imgur.com/a/LfZfyKx

另外,还有一个gif显示代码可以正常工作:

https://imgur.com/a/xTIfvdk

问题是,它不会保存您每次​​击键输入的内容。而是等到您完成操作并更改选择或按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)


python pyqt
1个回答
0
投票

我要做的是,当用户单击“添加”时,程序首先通过比较“旧”字符串来验证条目是否已更改。和新的。如果是这样,它将保存新的字符串并将其设置为小部件。否则,它将仅添加新条目。我希望这可以引导您找到解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.