gpt4 book ai didi

python - 如何自定义QComboBox

转载 作者:太空宇宙 更新时间:2023-11-04 10:32:19 25 4
gpt4 key购买 nike

我希望能够从其下拉菜单中选择多个 QComboBox 的项目(使用 Shift 或 Alt+单击以添加/提取当前选择)。

  1. 单击 QComboBox 会下拉一个下拉菜单。

  2. 但是当用户第二次点击鼠标时(从下拉菜单中选择一个项目)

ComboBox 不会像默认情况下那样回滚(或自行折叠)。相反,它将保持打开状态,以便用户能够通过按住 Shift 键并单击更多组合框项目来添加或从选择中提取它们。最后,当用户对选择感到满意时,按下 Enter 键以“确认”选择。

这是一张 Photoshop 图像,展示了我想要实现的“多选”QComboBox 的概念:

enter image description here

下面的代码创建了 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_())

最佳答案

否则,您可以使用类似图标来检查状态。比 QtGui.QStandardItem 简单。方法QIcon QComboBox.itemIcon (self, int index)和方法QComboBox.setItemIcon (self, int index, QIcon icon)在类里面可用 QtGui.QComboBox ;

import sys
from PyQt4 import QtGui

class QCustomComboBox (QtGui.QComboBox):
CHECK_QICON = QtGui.QIcon.fromTheme('call-start')
UNCHECK_QICON = QtGui.QIcon.fromTheme('call-stop')

def __init__(self, *args, **kwargs):
super(QCustomComboBox, self).__init__(*args, **kwargs)
listsItem = ['Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5']
for index in range(0, len(listsItem)):
self.addItem(listsItem[index])
self.setItemIcon(index, self.UNCHECK_QICON)
self.activated.connect(self.customActivated)

def hidePopup (self):
pass # Force only ESC button to exit.

def customActivated (self, index):
# self.blockSignals(True) # Force first index only
# self.setCurrentIndex(0)
# self.blockSignals(False)
stateQIcon = self.itemIcon(index)
newQIcon = {
self.CHECK_QICON.name() : self.UNCHECK_QICON,
self.UNCHECK_QICON.name() : self.CHECK_QICON,
} [stateQIcon.name()]
self.setItemIcon(index, newQIcon)
print self.export() # View last update data

def export (self):
listsExportItem = []
for index in range(0, self.count()):
stateQIcon = self.itemIcon(index)
state = {
self.CHECK_QICON.name() : True,
self.UNCHECK_QICON.name() : False,
} [stateQIcon.name()]
listsExportItem.append([str(self.itemText(index)), state])
return listsExportItem

myQApplication = QtGui.QApplication([])
myQCustomComboBox = QCustomComboBox()
myQCustomComboBox.show()
sys.exit(myQApplication.exec_())

关于python - 如何自定义QComboBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25733471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com