如何在pyqt4 python中从QcomboBox删除重复项

时间:2019-04-22 09:40:28

标签: python duplicates pyqt4 qcombobox

如何从pyqt4的组合框中删除重复项。我已经尝试过以下代码,但不能从comboBox中删除重复项。

代码:

from PyQt4 import QtCore, QtGui
import sys
app = QtGui.QApplication(sys.argv)
w = QtGui.QWidget()
w.resize(500, 388)

combo=QtGui.QComboBox(w)
combo.setGeometry(QtCore.QRect(150, 50, 251, 31))
combo.addItem("aa")
combo.addItem("bb")
combo.addItem("cc")
combo.addItem("aa")
combo.setDuplicatesEnabled(False)

w.setWindowTitle("PyQt")
w.show()
sys.exit(app.exec_())

2 个答案:

答案 0 :(得分:1)

似乎您还没有阅读docs

  

此属性保存用户是否可以在其中输入重复的项目   组合框。

     

请注意,总是可以通过编程方式插入重复项   项目进入组合框。

     

默认情况下,此属性为false(不允许重复)。

     

重点是我的

因此可能的解决方案是覆盖addItem方法以进行过滤:

from PyQt4 import QtCore, QtGui
import sys


class ComboBox(QtGui.QComboBox):
    def addItem(self, item):
        if item not in self.get_set_items():
            super(ComboBox, self).addItem(item)

    def addItems(self, items):
        items = list(self.get_set_items() | set(items))
        super(ComboBox, self).addItems(items)

    def get_set_items(self):
        return set([self.itemText(i) for i in range(self.count())])


if __name__ == "__main__":
    import sys

    app = QtGui.QApplication(sys.argv)
    w = QtGui.QWidget()
    w.resize(500, 388)

    combo = ComboBox(w)
    combo.setGeometry(QtCore.QRect(150, 50, 251, 31))
    combo.addItems(["aaa", "bb", "aaa"])
    combo.addItem("aa")
    combo.addItem("bb")
    combo.addItem("cc")
    combo.addItem("aa")
    w.setWindowTitle("PyQt")
    w.show()
    sys.exit(app.exec_())

答案 1 :(得分:0)

来自qt documentation

  

请注意,始终可以通过编程方式将重复项插入组合框。

您需要手动避免重复。您可以将所有项目制作成set,然后用addItem传递其项目。