TAG

首都機能移轉 (2) 歌詞 (2) 靠北文 (40) 戲言 (30) 糟糕 (7) ACG (23) Assembly (2) Boost (2) C (31) C++ (69) CMake (4) CSIE (67) Debian (34) Design_Pattern (2) Django (1) Eclipse (1) en_US (13) FFmpeg (3) FoolproofProject (26) FreeBSD (2) Git (4) GNU_Linux (65) IDE (5) Java (11) JavaScript (19) KDE (15) Khopper (16) KomiX (3) Kubuntu (18) Life (1) Lighttpd (2) Mac_OS_X (2) Opera (1) PHP (2) PicKing (2) Programing (21) Prolog (1) Python (7) QSnapshot (2) Qt (30) Qt_Jambi (1) Regular_Expression (1) Shell_Script (7) Talk (98) VirtualBox (7) Visual_Studio (13) Windows (18) zh_TW (36)

2011年1月23日 星期日

Use pyside-uic to compile ui files automatically

PySide 可以用 pyside-uic 來轉換 *.ui 到 python code,但每次都要手動弄這個真的很煩。所以我把所有的 ui 檔案集中放到一個資料夾內作為 package,並在 __init__.py 上動點手腳:
import os, sys

__uicPath__ = os.path.join( sys.prefix, 'Scripts', 'pyside-uic' ) if os.name == 'nt' else 'pyside-uic'

for root, dirs, files in os.walk( __path__[0] ):
    for file in files:
        name, ext = os.path.splitext( file )
        if ext != '.ui':
            continue
        uiPath = os.path.join( root, file )
        pyPath = os.path.join( root, name + '.py' )
        uiMT = os.path.getmtime( uiPath )
        try:
            pyMT = os.path.getmtime( pyPath )
            if pyMT < uiMT:
                raise os.error
        except os.error:
            cmd = u'%s %s -o %s' % ( __uicPath__, uiPath, pyPath )
            print cmd
            os.system( cmd )
用意是掃過所有 *.ui, 檢查是不是對應的 *.py 其 mtime,如果 ui 比 py 新就重跑一次 uic。效率上應該還可以接受,畢竟一個程式裡很難有太多 UI forms。
如果你放了一個 ui form 在 ui/mainwindow.ui,那麼你可以像這麼 import 它:
from ui.mainwindow import Ui_MainWindow

沒有留言:

張貼留言