PyQt5中QLineEdit绑定的QCompleter自动补全不显示选项问题
代码错误原因
- 错误1:QMainWindow不支持直接调用
setLayout()方法设置布局,你代码中多余创建了未使用的self.mwidget对象,布局相关代码完全无效。 - 错误2:每次下拉选项切换触发回调函数时,都会重新生成一个新的QLineEdit输入框叠在旧输入框上方,你实际操作的始终是最开始生成的无补全功能的旧输入框,带补全的新输入框被遮挡无法触发。同时QLineEdit被定义为局部变量,存在被垃圾回收导致功能失效的风险。
- 错误3:自动补全配置逻辑错误,无需每次切换选项都新建输入框,只需提前创建唯一的输入框作为实例属性,切换选项时动态修改其补全配置即可。
修正后可运行代码
from PyQt5.QtWidgets import * from PyQt5.QtGui import * import sys class KnowledgeBaseGui(QMainWindow): def __init__(self): super().__init__() self.setGeometry(500, 400, 650, 650) self.setWindowTitle("pyqt5") self.nand_cmd_menu_current_text = None # 提前创建全局唯一的输入框,存为实例属性 self.cmd_lineEdit = QLineEdit(self) self.cmd_lineEdit.setGeometry(200, 175, 150, 35) # 预设names列表 self.names = ["apple", "alpha", "beta", "blackberry", "charlie", "delta", "chilton", "dawn"] def cmd_button(self): self.combo_cmd = QComboBox(self) self.combo_cmd.setGeometry(80, 175, 115, 35) self.combo_cmd.setFont(QFont('Times', 11)) self.combo_cmd.setStyleSheet("background-color: rgb(166,180,242);border: 2px solid rgb(20,20,20)") self.combo_cmd.addItems(["CMDs", "B4.5", "B5", "B6"]) self.combo_cmd.currentTextChanged.connect(self.design_manual_select) def design_manual_select(self, val): if val == "B4.5": print(val) completer = QCompleter(self.names) self.cmd_lineEdit.setCompleter(completer) else: # 非B4.5选项移除补全 self.cmd_lineEdit.setCompleter(None) if __name__ == '__main__': app = QApplication(sys.argv) app.setStyleSheet("QMainWindow{" "background-image:url(abc.jpg); background-color: rgb(130,130,125);" "border: 1px solid rgb(1,1,1)}") CallKnowledgeBaseGui = KnowledgeBaseGui() CallKnowledgeBaseGui.cmd_button() CallKnowledgeBaseGui.show() sys.exit(app.exec())
内容的提问来源于stack exchange,提问作者rhapsody
相关产品推荐
相关产品推荐

