【发布时间】:2014-11-02 05:11:50
【问题描述】:
我希望能够从其下拉菜单中选择多个QComboBox 的项目(使用 Shift 或 Alt+单击以从当前选择中添加/提取)。
单击时,QComboBox 会向下滚动一个下拉菜单。
但是当用户第二次点击鼠标时(从下拉菜单中选择一个项目)
ComboBox 不会像默认情况下那样回滚(或自折叠)。相反,它将保持打开状态,以便用户能够按住 Shift 键并单击更多组合框项目以添加或从选择中提取它们。最后,当用户对选择感到满意时,按下Enter 键以“确认”选择。
这是一个 Photoshop 的图像,显示了我想要实现的“多选”QComboBox 的概念:
下面的代码创建 QComboBox,几乎所有事件都暴露出来。但我看到的唯一“代理”是 onMousePressEvent()。当用户从下拉菜单中选择项目时,我找不到追踪的方法......
编辑:
一小时后,我了解到QComboBox 可以通过其.view().setSelectionMode(3) 设置为多选。
那么同样的.view()可以用来查询Combobox选中项:
selectedIndexes=self.view().selectionModel().selectedIndexes()
(其中self 本身就是一个组合)
有一种方法可以使用selectionModel.select(idx, QtGui.QItemSelectionModel.Select) 选择组合项
但到目前为止我没能成功.....
from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])
class Combo(QtGui.QComboBox):
def __init__(self, *args, **kwargs):
super(Combo, self).__init__()
self.addItems(['Item_1','Item_2','Item_3','Item_4','Item_5'])
self.view=self.view()
self.view.setSelectionMode(3)
self.activated.connect(self.clicked)
self.show()
def clicked(self, arg=None):
selectionModel=self.view.selectionModel()
selectedIndexes=selectionModel.selectedIndexes()
for idx in selectedIndexes:
selectionModel.select(idx, QtGui.QItemSelectionModel.Select)
print 'selecting idx: %s'%idx
self.showPopup()
tree=Combo()
sys.exit(app.exec_())
【问题讨论】: