[ kazil @ 18.03.2009. 15:38 ] @
Pozdrav dobri ljudi :) Skrpio sam neku skripticu za sebe, pa da podelim :) Skripta nalazi iz druge .py skripte sve (bar se nadam) Qt klase i pomocu dokumentacije na http://doc.trolltech.com/4.4/ odredjuje koju Qt klasu iz kog Qt modula treba importovati. Cisto da se ne radi from PyQt4.QtCore import * :) Ako se ode na stranicu neke klase, primera radi http://doc.trolltech.com/4.4/qaction.html ispod glavnog naslova stoji kom modulu pripada data klasa. U html source-u je to red 15. Kod: Code: #!/usr/bin python '''pyqtdependency.py a script to grab all Qt classes from a .py script and see from which Qt module should those classes be imported''' import sys import os import re import urllib2 import string if __name__ == "__main__": if len(sys.argv) < 2: print "Bah! I need a file to process!" sys.exit() modules = {} classes = [] '''patt finds from rows like: class Spam(QWidget): qidget = QWidget() action = QAction(QIcon(...))''' patt = re.compile('.*(Q[A-Z]{1}[a-zA-Z]+)[(.*]') '''On row 15 there's only 1 anchor tag with the module name in it''' patt2 = re.compile('(Q[a-zA-Z]+)</a>') file = sys.argv[1] fp = open(file, 'rb') lines = fp.readlines() fp.close() for line in lines: match = patt.search(line) if match is not None: match = match.group(1) if match not in classes: classes.append(match) for cl in classes: url = 'http://doc.trolltech.com/4.4/%s.html' % string.lower(cl) resp = urllib2.urlopen(url) '''The module name is in row 15, go there''' for i in range(0,15): if i < 14: resp.next() elif i == 14: match = patt2.search(resp.readline()) match = match.group(1) else: break if match in modules: modules[match].append(cl) else: modules[match] = [cl] print modules Skripta je dosta gruba, nema nikakvih provera na greske, ali radi :) Pozivanje je jednostavno: ./qtDependency.py imeskripte.py Primer output-a: Code: {'QtCore': ['QTranslator'], 'QtGui': ['QMainWindow', 'QMessageBox', 'QApplication']} Za sada sam proveravao samo sa skriptama koje imaju QtCore i QtGui module, mada, trebalo bi da radi i sa ostalima. Osim provere na greske, moze jos da se ubaci da koristi dokumentaciju sa file sistema, da nalazi stvari kao sto su Qt.WA_DeleteOnClose itd. Interesuje me, da li ima (a mora da ima :D) neki efikasniji nacin citanja 15og reda iz html-a? Svako dobro :) Edit: promenio sam ime u pyqtdependency.py, da bude jasnije. Takodje, nabacio sam na Google Code http://code.google.com/p/pyqtdependency/ [Ovu poruku je menjao kazil dana 18.03.2009. u 21:51 GMT+1] [Ovu poruku je menjao kazil dana 18.03.2009. u 21:51 GMT+1] |