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 senders = [widget] 21 else: 22 senders = self.find_widgets(widget, sender_name) 23 24 slot = slot_name.split("(")[0] 25 if hasattr(obj, slot): 26 signal = SIGNAL(signal_name) 27 for sender in senders: 28 QObject.connect(sender, signal, getattr(obj, slot)) 29 30 def find_widgets(self, widget, name): 31 widgets = [] 32 found = widget.child(name) 33 if found: 34 widgets.append(found) 35 for child in widget.children(): 36 widgets += self.find_widgets(child, name) 37 return widgets 38 39 def get_text(self, node): 40 node.normalize() 41 return node.childNodes[0].nodeValue 42 43 def find_widget_element(self, name): 44 for widget in self.ui_doc.getElementsByTagName("widget"): 45 for property in widget.getElementsByTagName("property"): 46 if property.getAttribute("name") == "name": 47 for cstring in property.getElementsByTagName("cstring"): 48 found_name = self.get_text(cstring) 49 if found_name == name: 50 return widget 51 return None 52 53 # vim: tabstop=4 expandtab shiftwidth=4