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