1 #!/usr/bin/env python 2 3 from qt import * 4 import qtui 5 import qtxmldom 6 7 class Factory: 8 def __init__(self, ui_filename): 9 self.ui_filename = ui_filename 10 self.ui_doc = qtxmldom.parse(ui_filename) 11 12 def connect(self, widget, obj): 13 14 for connection in self.ui_doc.getElementsByTagName("connection"): 15 sender_name = self.get_text(connection.getElementsByTagName("sender")[0]).encode("utf-8") 16 signal_name = self.get_text(connection.getElementsByTagName("signal")[0]).encode("utf-8") 17 slot_name = self.get_text(connection.getElementsByTagName("slot")[0]).encode("utf-8") 18 19 if widget.name() == sender_name: 20 sender = widget 21 else: 22 sender = self.find_widget(widget, sender_name) 23 24 if sender: 25 signal = SIGNAL(signal_name) 26 slot = slot_name.split("(")[0] 27 28 if hasattr(obj, slot): 29 QObject.connect(sender, signal, getattr(obj, slot)) 30 31 def find_widget(self, widget, name): 32 found = widget.child(name) 33 if found: 34 return found 35 else: 36 for child in widget.children(): 37 found = self.find_widget(child, name) 38 if found: 39 return found 40 return None 41 42 def get_text(self, node): 43 node.normalize() 44 return node.childNodes[0].nodeValue 45 46 def find_widget_element(self, name): 47 for widget in self.ui_doc.getElementsByTagName("widget"): 48 for property in widget.getElementsByTagName("property"): 49 if property.getAttribute("name") == "name": 50 for cstring in property.getElementsByTagName("cstring"): 51 found_name = self.get_text(cstring) 52 if found_name == name: 53 return widget 54 return None 55 56 # vim: tabstop=4 expandtab shiftwidth=4