可以重寫showPopup方法來實現這一目標,將工作無論多麼的下拉列表中打開(即通過鼠標,鍵盤或快捷鍵):
from PyQt5 import QtCore, QtWidgets
class ComboBox(QtWidgets.QComboBox):
popupAboutToBeShown = QtCore.pyqtSignal()
def showPopup(self):
self.popupAboutToBeShown.emit()
super(ComboBox, self).showPopup()
class Window(QtWidgets.QWidget):
def __init__(self):
super(Window, self).__init__()
self.combo = ComboBox(self)
self.combo.popupAboutToBeShown.connect(self.populateConbo)
layout = QtWidgets.QVBoxLayout(self)
layout.addWidget(self.combo)
def populateConbo(self):
if not self.combo.count():
self.combo.addItems('One Two Three Four'.split())
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
但是,對於您的特別是用例,我認爲更好的解決方案可能是在組合框上設置QSqlQueryModel,以便項目自動從數據庫更新。
HI ekhumoro,真的很感謝你在這裏輸入。看來你的解決方案是最接近我將要尋找的。我沒有意識到這個屬性,這是有道理的,我從來沒有注意到這一點:void QComboBox :: showPopup(),所以感謝讓我意識到這一點。我將這個作爲我的問題的答案。非常感謝ekhumoro! – Palu