QCombobox & QListWidget - 检查内容

Posted

技术标签:

【中文标题】QCombobox & QListWidget - 检查内容【英文标题】:QCombobox & QListWidget - Check Content 【发布时间】:2019-12-15 02:42:15 【问题描述】:

我想问是否有办法检查一个项目是否在 QListWidget 或 QComboBox 中。 有了这个,我想确保每个项目在 QListWidget 或 QCombobox 中都是唯一的。 如果可能的话,我想要那样的东西:

   for i in range(0, len(LISTE), 1):
       if LISTE[i] in self.liste:
          return
       else:
          self.liste.addItem(LISTE[i])

【问题讨论】:

好吧,如果您使用 QListWidget 或 QComboBox 仅在代码中显示您在列表或字典中某个位置的数据,那么非常容易,因为您只需检查列表或字典 【参考方案1】:

您可以创建自己的 QComboBox 子类(以及分别为 QListWidget)。 然后您可以创建方法__contains__ 并重载其他方法。就像在这个例子中一样:

from PyQt5.QtWidgets import QComboBox, QApplication


class UniqueComboBox(QComboBox):
    def __init__(self):
        super().__init__()
        self._current_values = set()

    def __contains__(self, item):
        return item in self._current_values

    def addItem(self, text):  # this is simple implementation. do not support all cases
        if text not in self._current_values:
            super().addItem(text)
            self._current_values.add(text)

    def addItems(self, text_list):
        for el in text_list:
            self.addItem(el)


if __name__ == "__main__":
    app = QApplication([])
    combo = UniqueComboBox()
    combo.addItems(["a", "b", "a", "c"])
    print("a" in combo, "z" in combo)
    combo.show()
    app.exec_()

【讨论】:

以上是关于QCombobox & QListWidget - 检查内容的主要内容,如果未能解决你的问题,请参考以下文章

当鼠标通过 QSS 悬停在 QComboBox 上时,样式 QComboBox 的子控件向下箭头

在QT中怎么隐藏QComboBox的下拉列表并当单击QComboBox的编辑框时,就弹出QListWidget窗口

启动时在 QcomboBox 中显示特定项目

qtablewidget加入QcomboBox控件如何读取内容

QT5-控件-QComboBox

QComboBox样式表:字体图标项高