首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyQt4 QComboBox自动完成而不使用setModel?

PyQt4 QComboBox自动完成而不使用setModel?
EN

Stack Overflow用户
提问于 2015-03-10 02:16:34
回答 1查看 1.4K关注 0票数 0

我已经找到了几个具有自动完成的PyQt4 QComboBox的优秀示例(例如How do I Filter the PyQt QCombobox Items based on the text input?),但是它们都使用setModel和setSourceModel.等。

在不使用模型的情况下,可以在QComboBox中创建一个自动完成的PyQt4吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-10 14:59:19

用斯米特帕特尔的话..。我找到了一个有效的setCompleter示例。这是由QComboBox with autocompletion works in PyQt4 but not in PySide的风笛狂人发布的。

代码语言:javascript
复制
from PyQt4 import QtCore
from PyQt4 import QtGui

class AdvComboBox(QtGui.QComboBox):
    def __init__(self, parent=None):
        super(AdvComboBox, self).__init__(parent)

        self.setFocusPolicy(QtCore.Qt.StrongFocus)
        self.setEditable(True)

        # add a filter model to filter matching items
        self.pFilterModel = QtGui.QSortFilterProxyModel(self)
        self.pFilterModel.setFilterCaseSensitivity(QtCore.Qt.CaseInsensitive)
        self.pFilterModel.setSourceModel(self.model())

        # add a completer, which uses the filter model
        self.completer = QtGui.QCompleter(self.pFilterModel, self)
        # always show all (filtered) completions
        self.completer.setCompletionMode(QtGui.QCompleter.UnfilteredPopupCompletion)

        self.setCompleter(self.completer)

        # connect signals

        def filter(text):
            print "Edited: ", text, "type: ", type(text)
            self.pFilterModel.setFilterFixedString(str(text))

        self.lineEdit().textEdited[unicode].connect(filter)
        self.completer.activated.connect(self.on_completer_activated)

    # on selection of an item from the completer, select the corresponding item from combobox
    def on_completer_activated(self, text):
        if text:
            index = self.findText(str(text))
            self.setCurrentIndex(index)

if __name__ == "__main__":
    import sys

    app = QtGui.QApplication(sys.argv)

    combo = AdvComboBox()

    names = ['bob', 'fred', 'bobby', 'frederick', 'charles', 'charlie', 'rob']

    combo.addItems(names)
    combo.resize(300, 40)
    combo.show()

    sys.exit(app.exec_())
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28955072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档