class UiInspector: def __init__(self): self.ui_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '../src/ui/*.ui')) self.printMsg("Loading UI files " + self.ui_dir) # list of widget classes we want to follow self.follow = [ QWidget, QDialog, QCheckBox, QComboBox, QDial, QPushButton, QLabel, QLCDNumber, QLineEdit, QRadioButton, QScrollBar, QSlider, QSpinBox, QTextEdit, QDateEdit, QTimeEdit, QDateTimeEdit, QListView, QProgressBar, QTableView, QTabWidget, QTextBrowser, QDialogButtonBox, QScrollArea, QGroupBox, QStackedWidget, ] def printMsg(self, msg): sys.stderr.write(msg + "\n") def widgetXml(self, element, widget, level=0, label=None): #print tostring ( element ) #self.printMsg ( "class: " + str( type ( widget ) ) ) #self.printMsg ( "objectName: " + widget.objectName() ) #self.printMsg ( "windowTitle: " + widget.windowTitle() ) if not widget.objectName(): return lab = label if hasattr(widget, 'text'): lab = widget.text() if widget.windowTitle(): label = widget.windowTitle() if not lab: lab = '' subElement = self.doc.createElement('widget') subElement.setAttribute('class', widget.__class__.__name__) subElement.setAttribute('objectName', widget.objectName()) subElement.setAttribute('label', lab) element.appendChild(subElement) #print str ( widget.children () ) # tab widget label is stored in QTabWidget->QTabBarPrivate->tabList->QTab .. if type(widget) in [QTabWidget]: children = list({'widget': widget.widget(i), 'label': widget.tabText(i)} for i in range(0, widget.count())) else: children = list({'widget': c, 'label': None} for c in widget.children()) for child in children: w = child['widget'] if w.isWidgetType() and (type(w) in self.follow): self.widgetXml(subElement, w, level + 1, child['label']) def xml(self): self.doc = QDomDocument() element = self.doc.createElement("qgiswidgets") self.doc.appendChild(element) for p in glob.glob(self.ui_dir): self.printMsg("Loading " + p) # qgsrasterlayerpropertiesbase.ui is giving: No module named qwt_plot try: widget = loadUi(p) #print dir ( ui ) self.widgetXml(element, widget) except Exception, e: #except IOError, e: self.printMsg(str(e)) return self.doc.toString(2)