1. 建一個簡單的 UI,有三個按鈕,最後一個有 lable,按下去時會建一個球
from pymel.core import * # define a button pressed function def buttonPressed(*args): sphere() # create a window and name it "My Window" win = window(title="My Window") layout = columnLayout( rowSpacing=5, columnWidth=200 ) # create 3 buttons and the last one with a "createSphere" label btn1 = button(parent=layout) btn2 = button(parent=layout) btn3 = button(label="createSphere", parent=layout, command=buttonPressed) showWindow()
結果如下,非常容易
2, 同樣的 UI,如果使用 Qt 的話會如何呢?
import pymel.core as pm dialog1 = pm.loadUI(f='.ui的路徑') pm.showWindow(dialog1)
UI 由 Qt designer 製作好,在 Maya 這邊叫出這個 UI 只是簡單的二行碼,重點是在做 button 時,不要忘記指定所要執行的 command,之前有一個疑問有關如何得到 UI 中 Control 的資訊,這次也花了一點時間做了試驗,我在 UI 中加了一個 "myLineEdit" 的 control,只需使用以下的 script 就可以得到輸入欄的資訊
textField( dialog1 + "|myLineEdit",query=True,text=True)
雖然我覺得這樣看起來怪怪的,但是可以用的,只是 UI control 的 objectName 被隱藏在 .ui 檔裡或是 Qt Designer 端,有點資訊不對稱的感覺。
接下來的範例,我都儘量使用 Qt Designer 來做 UI,實作多一點經驗應該可以對 Qt + PyMel 有更深一層的體會,搞不好會發現一些目前還沒注意到的東西 (希望~)。
補充一點,如果想要知道目標 window 是否已經存在,
pymel.window("window name", exists=True)
如果已經存在的話,就會得到 True 要不然就會得到 False 的值
No comments:
Post a Comment