Mercurial > lcfOS
view python/qtpropertyviewer.py @ 109:ad14c7c52589
Created qt property viewer
author | Windel Bouwman |
---|---|
date | Thu, 03 Jan 2013 18:33:29 +0100 |
parents | |
children |
line wrap: on
line source
from PyQt4.QtCore import * from PyQt4.QtGui import * import sys class QtPropertyModel(QAbstractTableModel): def __init__(self): super().__init__() self.InspectedWidget = None def getInspectedWidget(self): return self.inspectedWidget def setInspectedWidget(self, w): self.inspectedWidget = w if isinstance(self.inspectedWidget, QObject): mo = self.inspectedWidget.metaObject() self.metaprops = [mo.property(i) for i in range(mo.propertyCount())] self.metaprops = sorted(self.metaprops, key=lambda mp: mp.name()) else: self.metaprops = [] self.modelReset.emit() InspectedWidget = property(getInspectedWidget, setInspectedWidget) def rowCount(self, parent): return len(self.metaprops) def columnCount(self, parent): return 2 def headerData(self, section, orientation, role): if orientation == Qt.Horizontal and role == Qt.DisplayRole: if section == 0: return 'Property' elif section == 1: return 'Value' def data(self, index, role): if index.isValid(): row = index.row() col = index.column() metaprop = self.metaprops[row] if role == Qt.DisplayRole: propname = metaprop.name() if col == 0: return propname elif col == 1: if metaprop.isReadable(): propval = metaprop.read(self.inspectedWidget) return propval return 'NOT READABLE' return '{0}, {1}'.format(row, col) elif role == Qt.BackgroundRole: if col == 1: if metaprop.isWritable(): return QBrush(Qt.green) else: return QBrush(Qt.red) elif role == Qt.CheckStateRole: if col == 1: val = metaprop.read(self.inspectedWidget) if type(val) is bool: val = Qt.Checked if val else Qt.Unchecked return val def flags(self, index): if index.isValid(): row = index.row() col = index.column() metaprop = self.metaprops[row] if col == 1 and metaprop.isWritable(): val = metaprop.read(self.inspectedWidget) if type(val) == bool: return super().flags(index) | Qt.ItemIsEditable | Qt.ItemIsUserCheckable else: return super().flags(index) | Qt.ItemIsEditable else: return super().flags(index) def setData(self, index, value, role): if index.isValid(): row = index.row() col = index.column() metaprop = self.metaprops[row] if role == Qt.EditRole: metaprop.write(self.inspectedWidget, value) return True elif role == Qt.CheckStateRole: value = True if value == Qt.Checked else False metaprop.write(self.inspectedWidget, value) return True else: print('unknown role:', role) return False return False class QtPropertyViewer(QWidget): """ The binviewer consists of a hex view, a ascii view and perhaps others.. """ def __init__(self): super().__init__() tableView = QTableView() l = QVBoxLayout(self) l.addWidget(tableView) header = tableView.horizontalHeader() header.setResizeMode(QHeaderView.ResizeToContents) self.propertyModel = QtPropertyModel() tableView.setModel(self.propertyModel)