为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

波斯汪 2022-01-18 16:16:46
如何从 pyqt4 的组合框中删除重复项。我尝试了以下代码,但它没有从组合框中删除重复项。代码:from PyQt4 import QtCore, QtGuiimport sysapp = 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 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

看来您还没有阅读文档:


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


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


默认情况下,此属性为 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_())


查看完整回答
反对 回复 2022-01-18
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

qt 文档

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

您需要手动避免重复。您可以制作set所有项目的 a ,然后将其项目与addItem.


查看完整回答
反对 回复 2022-01-18
  • 2 回答
  • 0 关注
  • 549 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信