QComboBox点击事件

QComboBox click event

我一直在尝试让 PyQt5 中的 QComboBox 从数据库 table 中填充。问题是试图找到一种识别点击事件的方法。

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

关于我的用例,我能找到的最好的文章来自这篇 link 参考 PyQt4 QComboBox:

我还发现了另一个 link,其中包含一张 QComboBox 的漂亮图片。 第一个元素似乎是一个标签,后面是一个列表:

为什么要在激活时而不是在加载 window 时填充它?

我目前正在使用 PySide(Qt 框架的另一个 Python 绑定)开发一个应用程序,我在 mainwindow class __init__ 中填充我的组合框功能,这似乎是要走的路,从许多例子来看。

Zetcode 查看 "QCombobox" 下的示例代码。

您可以覆盖 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,以便自动从数据库更新项目。

备选方案一:

我们可以使用frame click,代码是在combo box的容器中使用的(windows/dialog/etc.)

def mousePressEvent(self, event):
        print("Hello world !")

def mousePressEvent():
        print("Hello world !")

备选方案二:

我们可以将处理程序连接到组合视图的按下信号

    self.uiComboBox.view().pressed.connect(self.handleItemPressed)
    ...

    def handleItemPressed(self, index):
        item = self.uiComboBox.model().itemFromIndex(index)
        print("Do something with the selected item")