QComboBox点击事件

新手上路,请多包涵

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

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

我在这里的用例中可以找到的最好的文章来自此链接,该链接引用 PyQt4 QComboBox

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

原文由 Palu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

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

原文由 ekhumoro 发布,翻译遵循 CC BY-SA 3.0 许可协议

备选方案一:

我们可以使用frame click,代码是在组合框的容器中使用(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")

原文由 intika 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题