QComboBox单击事件

2024-05-13 12:42:11 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我能在这里找到的关于我的用例的最好的文章是从这个链接中引用PyQt4QComboBox

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


Tags: 方法in数据库处理程序列表链接文章事件
3条回答

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

我目前正在使用PySide(Qt框架的另一个Python绑定)开发一个应用程序,并在mainwindow类__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,以便从数据库自动更新项目

备选方案一:

我们可以使用框架单击,代码将在组合框(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")

相关问题 更多 >