comparison python/qtpropertyviewer.py @ 109:ad14c7c52589

Created qt property viewer
author Windel Bouwman
date Thu, 03 Jan 2013 18:33:29 +0100
parents
children
comparison
equal deleted inserted replaced
108:8267ba1dbce3 109:ad14c7c52589
1 from PyQt4.QtCore import *
2 from PyQt4.QtGui import *
3 import sys
4
5 class QtPropertyModel(QAbstractTableModel):
6 def __init__(self):
7 super().__init__()
8 self.InspectedWidget = None
9 def getInspectedWidget(self):
10 return self.inspectedWidget
11 def setInspectedWidget(self, w):
12 self.inspectedWidget = w
13 if isinstance(self.inspectedWidget, QObject):
14 mo = self.inspectedWidget.metaObject()
15 self.metaprops = [mo.property(i) for i in range(mo.propertyCount())]
16 self.metaprops = sorted(self.metaprops, key=lambda mp: mp.name())
17 else:
18 self.metaprops = []
19 self.modelReset.emit()
20 InspectedWidget = property(getInspectedWidget, setInspectedWidget)
21 def rowCount(self, parent):
22 return len(self.metaprops)
23 def columnCount(self, parent):
24 return 2
25 def headerData(self, section, orientation, role):
26 if orientation == Qt.Horizontal and role == Qt.DisplayRole:
27 if section == 0:
28 return 'Property'
29 elif section == 1:
30 return 'Value'
31 def data(self, index, role):
32 if index.isValid():
33 row = index.row()
34 col = index.column()
35 metaprop = self.metaprops[row]
36 if role == Qt.DisplayRole:
37 propname = metaprop.name()
38 if col == 0:
39 return propname
40 elif col == 1:
41 if metaprop.isReadable():
42 propval = metaprop.read(self.inspectedWidget)
43 return propval
44 return 'NOT READABLE'
45 return '{0}, {1}'.format(row, col)
46 elif role == Qt.BackgroundRole:
47 if col == 1:
48 if metaprop.isWritable():
49 return QBrush(Qt.green)
50 else:
51 return QBrush(Qt.red)
52 elif role == Qt.CheckStateRole:
53 if col == 1:
54 val = metaprop.read(self.inspectedWidget)
55 if type(val) is bool:
56 val = Qt.Checked if val else Qt.Unchecked
57 return val
58
59 def flags(self, index):
60 if index.isValid():
61 row = index.row()
62 col = index.column()
63 metaprop = self.metaprops[row]
64 if col == 1 and metaprop.isWritable():
65 val = metaprop.read(self.inspectedWidget)
66 if type(val) == bool:
67 return super().flags(index) | Qt.ItemIsEditable | Qt.ItemIsUserCheckable
68 else:
69 return super().flags(index) | Qt.ItemIsEditable
70 else:
71 return super().flags(index)
72 def setData(self, index, value, role):
73 if index.isValid():
74 row = index.row()
75 col = index.column()
76 metaprop = self.metaprops[row]
77 if role == Qt.EditRole:
78 metaprop.write(self.inspectedWidget, value)
79 return True
80 elif role == Qt.CheckStateRole:
81 value = True if value == Qt.Checked else False
82 metaprop.write(self.inspectedWidget, value)
83 return True
84 else:
85 print('unknown role:', role)
86 return False
87 return False
88
89 class QtPropertyViewer(QWidget):
90 """
91 The binviewer consists of a hex view, a ascii view
92 and perhaps others..
93 """
94 def __init__(self):
95 super().__init__()
96 tableView = QTableView()
97 l = QVBoxLayout(self)
98 l.addWidget(tableView)
99 header = tableView.horizontalHeader()
100 header.setResizeMode(QHeaderView.ResizeToContents)
101 self.propertyModel = QtPropertyModel()
102 tableView.setModel(self.propertyModel)
103