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 它:
如果你放了一個 ui form 在 ui/mainwindow.ui,那麼你可以像這麼 import 它:
from ui.mainwindow import Ui_MainWindow
沒有留言:
張貼留言