У меня есть QtreeView как вид в QComboBox. В моем приложении корневые элементы являются метками категории и не должны быть выбраны. Когда я создаю представление, я хотел бы предварительно выбрать один из дочерних элементов (первый корневой элемент выбран по умолчанию), но я не могу понять, как это сделать. Примерами этого являются (особенно для питона), тонкие на земле.Как выбрать элемент в QTreeView, который находится внутри QComboBox
Вот мой упрощенный пример:
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
data = [ (("Cat A",False), [(("Thing 1",True), []),(("Thing 2",True), [])]),
(("Cat B",False), [(("Thing 3",True), []), (("Thing 4",True), [])])]
class MyComboBox(QComboBox):
def __init__(self):
super(QComboBox,self).__init__()
self.setView(QTreeView())
self.view().setHeaderHidden(True)
self.view().setItemsExpandable(False)
self.view().setRootIsDecorated(False)
def showPopup(self):
self.view().expandAll()
QComboBox.showPopup(self)
class Window(QWidget):
def __init__(self):
QWidget.__init__(self)
self.model = QStandardItemModel()
self.addItems(self.model, data)
self.combo = MyComboBox()
self.combo.setModel(self.model)
layout = QVBoxLayout()
layout.addWidget(self.combo)
self.setLayout(layout)
# I can choose which combobox item to select here, but I am unable to
#choose child items
#self.combo.setCurrentIndex(1)
def addItems(self, parent, elements):
for text, children in elements:
item = QStandardItem(text[0])
# root items are not selectable, users pick from child items
item.setSelectable(text[1])
parent.appendRow(item)
if children:
self.addItems(item, children)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
Я работал из примеров here и here
вопрос в значительной степени был задан before, но не для питона, и решение разместило Безразлично Я работаю для меня.
thats отлично, подходит мне лучше. спасибо (оба) за то, что нашли время! (спасибо за супер примечание тоже) – tom