Python QComboBox单击事件

Python QComboBox单击事件,python,events,drop-down-menu,pyqt5,qcombobox,Python,Events,Drop Down Menu,Pyqt5,Qcombobox,我一直试图从数据库表中填充PyQt5中的QComboBox。问题是试图找到一种方法来识别点击事件 在我的GUI中,我的组合框最初是空的,但单击它后,我希望单击事件激活我与数据库通信并填充下拉列表的方法。到目前为止,似乎组合框的单击事件没有内置的事件处理程序。我希望我在这一点上是错的。我希望有人能告诉我,有一种方法可以做到这一点 我能在这里找到的关于我的用例的最好的文章来自于这个链接,它引用了PyQt4QComboBox: 我还发现了另一个链接,其中包含一个漂亮的QComboBox。 第一个

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

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

我能在这里找到的关于我的用例的最好的文章来自于这个链接,它引用了PyQt4
QComboBox

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


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

我目前正在使用PySide(Qt框架的另一个Python绑定)开发一个应用程序,我在mainwindow类
\uuuuu init\uuuuu
函数中填充我的组合框,从许多示例来看,这似乎是一种方法

查看位于上的“QCombobox”下的示例代码。

您可以覆盖该方法以实现此目的,无论下拉列表如何打开(即通过鼠标、键盘或快捷键),该方法都将起作用:


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

备选解决方案I:

我们可以使用框架单击,代码将在组合框(windows/dialog/etc)的容器中使用


备选方案二:

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

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

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

嗨,我明白你的意思。但我的数据库在开始时可能是空的,因此当用户第一次使用应用程序时,下拉列表将根本不会填充。开始时数据库中的表需要由用户通过另一个源填充。所以我需要在程序生命周期的后期填充它。因此,我无法在窗口加载事件时使用。@Palu QCOMBOX有一个名为“突出显示”的信号,当光标悬停在QCOMBOX上时会发出该信号(根据我所读的内容)。这可能不是你想要的,但它可能完成工作?否则,是否可以创建一个函数来检测何时出现新的DB条目,并在新条目出现时添加新条目,而不是在单击QCombobox时执行此操作?Hi-Pkarls,这是一个关于函数检测何时出现新条目的有趣想法。我会考虑的。我只是觉得奇怪,PyQt的人似乎没有想到这个组合框的基本事件。@Palu是的,我同意你的观点。嗨,ekhumoro,非常感谢你的意见。看来你的解决方案最接近我想要的。我不知道这个属性,这是有道理的,我以前从未注意到:void QComboBox::showPopup(),所以感谢您让我知道这一点。我将以此作为我问题的答案。非常感谢EKHUMO!!!Hi intika,这看起来很有趣,绝对是一个不同的视角,没有想到:Combo View()。我需要研究这个,理解这个,这个替代方案2。但我不知道你所说的使用“框架点击”的东西。我只看到mousePressEvent的代码。所以我不理解这一点。在第一种选择中,我的意思是:如果在你的应用程序中,用户出于某种原因不得不点击窗口(而不是组合框)。。。然后你可以截取点击并做你想做的事。。。另一种选择是,您可以隐藏/禁用组合框,强制用户执行某些操作以显示它,并使用该事件执行任何您想要的操作:)
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")