You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt5实现只读QCompleter:仅显示匹配项不可选择

实现QCompleter只读(仅展示候选,禁止选择)

要实现仅展示匹配候选、不允许选择的QCompleter,核心是禁用候选列表的交互能力,同时阻止自动填充行为。可以通过修改QCompleter的弹出视图属性,结合信号拦截来实现。

修改后的完整代码如下:

from PyQt5.QtWidgets import QApplication, QWidget, QCompleter, QLineEdit, QVBoxLayout, QAbstractItemView
from PyQt5.QtCore import Qt, QStringListModel
import sys

class MainWindow(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.testthislineEdit = QLineEdit()

        temp_list = ['alpha', 'beta', 'boota', 'beita']

        model = QStringListModel()
        model.setStringList(temp_list)

        completer = QCompleter()
        completer.setFilterMode(Qt.MatchContains)
        completer.setCaseSensitivity(Qt.CaseInsensitive)
        completer.setModel(model)

        # 配置候选列表为只读状态
        popup = completer.popup()
        # 禁止选中任何项,消除高亮效果
        popup.setSelectionMode(QAbstractItemView.NoSelection)
        # 移除焦点,避免键盘操作触发选择
        popup.setFocusPolicy(Qt.NoFocus)
        # 让视图忽略鼠标事件,阻止点击选择
        popup.setAttribute(Qt.WA_TransparentForMouseEvents)
        # 拦截激活信号,避免内容自动填充到输入框
        completer.activated.connect(lambda _: None)

        layout = QVBoxLayout()
        layout.addWidget(self.testthislineEdit)
        self.setLayout(layout)

        self.testthislineEdit.setCompleter(completer)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()

    try:
        sys.exit(app.exec_())
    except SystemExit:
        print('Closing Window...')

关键修改说明:

  • popup.setSelectionMode(QAbstractItemView.NoSelection):彻底禁用候选项的选中功能,不会出现任何高亮效果
  • popup.setFocusPolicy(Qt.NoFocus):移除候选列表的焦点,用户无法通过上下箭头等键盘操作触发选择
  • popup.setAttribute(Qt.WA_TransparentForMouseEvents):让候选列表忽略所有鼠标事件,点击操作不会产生任何响应
  • completer.activated.connect(lambda _: None):拦截候选项激活信号,即使有意外触发的情况,也不会将内容填充到输入框

这样配置后,QCompleter会正常展示匹配的候选列表,但用户无法选中任何项,完全符合只读展示的需求。

内容的提问来源于stack exchange,提问作者Mian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 09:20:29