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
沒有留言:
張貼留言