lanz, если в комбобоксе стандартными средствами можно показать дерево, то твой метод подойдет, но я не смогла.
Как я поняла для показа дерева в комбобокс нужно переопределять класс, я сделала так:
#! /usr/bin/python
# -*- coding: UTF-8 -*-
from PyQt4 import QtCore, QtGui
class TreeComboBox(QtGui.QComboBox):
def __init__(self, parent=None):
super(QtGui.QComboBox, self).__init__(parent)
self._skipNextHide = False
self._treeView = QtGui.QTreeView(self)
self.setView(self._treeView)
self._treeView.header().hide()
self._treeView.viewport().installEventFilter(self)
def eventFilter( self, object, event):
if event.type() == QtCore.QEvent.MouseButtonPress and object == self.view().viewport():
index = self.view().indexAt(event.pos())
if not self.view().visualRect(index).contains(event.pos()):
self._skipNextHide = True
return False
def showPopup(self):
self.setRootModelIndex(QtCore.QModelIndex())
self._treeView.expandAll()
QtGui.QComboBox.showPopup(self)
def hidePopup(self):
self.setRootModelIndex(self.view().currentIndex().parent())
self.setCurrentIndex(self.view().currentIndex().row())
if self._skipNextHide:
self._skipNextHide = False
else:
QtGui.QComboBox.hidePopup(self)
если я не права, то буду только рада, сразу куча проблем исчезнет!
Но пока не знаю как!