QComboBox点击事件

时间:2016-03-11 05:07:30

标签: python events drop-down-menu pyqt5 qcombobox

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

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

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

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

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:1)

替代解决方案I:

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

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

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

替代解决方案II:

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

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

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

答案 2 :(得分:-1)

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

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

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