QComboBox 自动完成 (QCompleter?)
Posted
技术标签:
【中文标题】QComboBox 自动完成 (QCompleter?)【英文标题】:QComboBox Auto Complete (QCompleter?) 【发布时间】:2020-09-27 21:24:37 【问题描述】:我对 Qt Designer 中的 Python GUI 小部件有另一个问题。 我正在使用带有 PyQt5 的 Python 3.7。
我有一个从 SQL 表生成到组合框的值列表。 组合框正确显示所有值,但总共有大约 100 个值,我希望能够输入并开始自动完成,以便我可以快速找到并选择我可能需要的任何值。
我做了一些让我感到困惑的研究。 我在 Python 中创建的列表名为 listofCustOrders,因为我正在构建一个“业务 gui”来帮助我了解有关 Python 编码的更多信息。有没有办法自动完成这个列表?
from PyQt5 import QtWidgets, uic
from Classes import CustOrders as CO
import DBConnection as DB
import time
class MyWindow(QtWidgets.QMainWindow):
listofCustOrders = []
def __init__(self):
super(MyWindow, self).__init__()
uic.loadUi('PyGUI.ui',self)
self.init()
def init(self):
global listofCustOrders
listofCustOrders = CO.CustOrders.getCustOrders()
for x in listofCustOrders:
self.cbCONum.addItem(x.getCustOrderNO())
self.cbCONum.currentIndexChanged.connect(self.coSelected)
self.CObutton.clicked.connect(self.Submitted1)
self.SLabel2.hide()
def coSelected(self, text):
cbCOIndex = self.cbCONum.currentIndex()
selectedCO = listofCustOrders[cbCOIndex]
self.RLbl2.setText(selectedCO.getPart())
self.QtyLbl3.setText(str(selectedCO.getQTY()))
def Submitted1(self):
self.SLabel1.hide()
self.SLabel2.show()
CBW = str(self.cbCONum.currentText())
PN = self.RLbl2.text()
QY = self.QLINE.text()
EP = self.EMPLINE.text()
TIMER = time.strftime('%m-%d-%Y %H:%M:%S')
conn1 = DB.DBConnection.getConnection()
cursor = conn1.cursor()
cursor.execute('''
INSERT INTO database.dbo (CustOrderNo, PartNo, Qty, Employee, Color)
VALUES (?, ?, ?, ?, ?)''',
(CBW, PN, QY, EP,TIMER,))
conn1.commit()
conn1.close()
self.QLINE.clear()
self.EMPLINE.clear()
self.RLbl2.clear()
def main():
import sys
app = QtWidgets.QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
【问题讨论】:
【参考方案1】:Qt 有用于此类任务的 QCompleter 类,这是一个如何使用它的示例。
completer = QCompleter(wordList, self)
completer.setCaseSensitivity(Qt.CaseInsensitive)
comboBox.setCompleter(completer)
供参考:https://doc.qt.io/qt-5/qcompleter.html,还可以查看简单示例,这些示例显示了如果您的模型(单词集)发生更改,如何更改您的完成者 - https://doc.qt.io/qt-5/qtwidgets-tools-completer-example.html。不幸的是,这些示例是用 C++ 编写的。
【讨论】:
仅供参考,在 python 中,您可以像这样更新QCompleter
中的模型:completer = comboBox.completer(); completer.setModel(QtCore.QStringListModel(['word1', 'word2', ...], completer))
以上是关于QComboBox 自动完成 (QCompleter?)的主要内容,如果未能解决你的问题,请参考以下文章
QT QComboBox 怎么在点击过后把它设置为初始状态??
QComboBox 点击时才填充下拉列表 使用哪个信号啊解决方法
当鼠标通过 QSS 悬停在 QComboBox 上时,样式 QComboBox 的子控件向下箭头
在QT中怎么隐藏QComboBox的下拉列表并当单击QComboBox的编辑框时,就弹出QListWidget窗口