您可以重写showPopup方法以实现此目的,无论下拉列表如何打开(即通过鼠标,键盘或快捷方式),该方法都将起作用:
from PyQt5 import QtCore, QtWidgetsclass 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,以便从数据库自动更新项目。



