QComboBox click event
我一直在尝试从数据库表中填充PyQt5中的
在我的GUI中,组合框最初是空的,但是在单击它时,我希望单击事件激活我的方法以与数据库进行通信并填充下拉列表。到目前为止,似乎没有针对组合框的单击事件的内置事件处理程序。我希望我做错了。我希望有人能够告诉我,有一种方法可以做到这一点。
在此用例中,我能找到的最好的文章是从此链接引用PyQt4
- pyqt4组合框中的下拉事件/回调
我还找到了另一个链接,其中包含
第一个元素似乎是标签,后跟一个列表:
- 从QComboBox弹出菜单中捕获按下鼠标按钮的信号
您可以重写showPopup方法以实现此目的,无论下拉列表如何打开(即通过鼠标,键盘或快捷方式),该方法都将起作用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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,以便从数据库自动更新项目。
替代解决方案I:
我们可以使用框架单击,该代码将在组合框的容器中使用(windows / dialog / etc。)
1 2 | def mousePressEvent(self, event): print("Hello world !") |
或
1 2 | def mousePressEvent(): print("Hello world !") |
替代解决方案II:
我们可以将处理程序连接到组合视图的按下信号
1 2 3 4 5 6 | self.uiComboBox.view().pressed.connect(self.handleItemPressed) ... def handleItemPressed(self, index): item = self.uiComboBox.model().itemFromIndex(index) print("Do something with the selected item") |
为什么要在激活它而不是在加载窗口时填充它?
我目前正在使用PySide(Qt框架的另一个Python绑定)开发应用程序,并在mainwindow类
在Zetcode的" QCombobox"下查看示例代码。