QComboBox Auto Complete (QCompleter?)



我对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()

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++。

最新更新