我一直试图让PyQt5中的QComboBox
从数据库表中填充。问题是试图找到一种识别其上的点击事件的方法。
在我的GUI中,我的组合框最初是空的,但是点击它后我希望click事件激活我的方法来与数据库通信并填充下拉列表。到目前为止,似乎没有用于组合框的单击事件的内置事件处理程序。我希望我错了。我希望有人能够告诉我有办法做到这一点。
我在这个用例中找到的最好的文章来自此链接,指的是PyQt4 QComboBox
:
我还发现另一个链接包含QComboBox
的精美图像。
第一个元素似乎是一个标签后跟一个列表:
答案 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。