QComboBox点击事件

Pal*_*alu 5 python events qcombobox drop-down-menu pyqt5

我一直试图让QComboBoxPyQt5从数据库表中填充.问题是试图找到一种识别其上的点击事件的方法.

在我的GUI中,我的组合框最初是空的,但是在单击它时我希望click事件激活我的方法以与数据库通信并填充下拉列表.到目前为止,似乎没有用于组合框的单击事件的内置事件处理程序.我希望我错了.我希望有人能够告诉我有办法做到这一点.

我在这个用例中找到的最好的文章来自这个指向PyQt4的链接QComboBox:

我还发现另一个包含a的漂亮图像的链接QComboBox.第一个元素似乎是一个标签后跟一个列表:

ekh*_*oro 9

您可以覆盖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_())
Run Code Online (Sandbox Code Playgroud)

但是,对于您的特定用例,我认为更好的解决方案可能是在组合框上设置QSqlQueryModel,以便自动从数据库更新项目.