Pyside勉強 その六
では次はもう少し実践を意識したツールを作ってみます。
前回のUIを意識して、リストに物を追加して
処理を行うものにします。
またボタンを追加して、リストに入っているものを
コンストレインレインを行う。といったツールにします。
細かい処理はいれないので、シンプルなものになるかな?
以下コード。
#-'''- coding: utf-8 -'''- from PySide.QtCore import * from PySide.QtGui import * from maya.app.general import mayaMixin class Ui_MainWindow(mayaMixin.MayaQWidgetBaseMixin,QDialog): def __init__(self, parent=None): super(Ui_MainWindow, self).__init__(parent) #全体のサイズ設定 self.resize(500,400) #レイアウトを宣言 #全体纏めるレイアウトAll_Layoutと、パーツまとめるレイアウトmain_layout self.All_Layout = QVBoxLayout() self.main_layout = QHBoxLayout() #左側のUI作成 self.Source_0 = QPushButton("Add") self.Scroll_Sorce_List = QListWidget() self.Scroll_Sorce_List.resize(250,150) self.Left_layout = QVBoxLayout() self.Left_layout.addWidget(self.Source_0) self.Left_layout.addWidget(self.Scroll_Sorce_List) #右側のUI作成 self.Source_1 = QPushButton("Add") self.Scroll_Sorce_List_02 = QListWidget() self.Scroll_Sorce_List_02.resize(250,150) self.Right_layout = QVBoxLayout() self.Right_layout.addWidget(self.Source_1) self.Right_layout.addWidget(self.Scroll_Sorce_List_02) #左右のパーツをメインレイアウトに追加 self.main_layout.addLayout(self.Left_layout) self.main_layout.addLayout(self.Right_layout) #実行用のボタンを追加して、パーツをレイアウトに追加 self.ExeButton = QPushButton("Exe") self.All_Layout.addLayout(self.main_layout) self.All_Layout.addWidget(self.ExeButton) #最後に大元のレイアウトに追加 self.setLayout(self.All_Layout) self.Source_0.clicked.connect(self.Left_ADD) self.Source_1.clicked.connect(self.Right_ADD) self.ExeButton.clicked.connect(self.Exe) def Left_ADD(self): sel = cmds.ls(sl=True,type="transform") for i in sel: self.Scroll_Sorce_List.addItem(i) def Right_ADD(self): sel = cmds.ls(sl=True,type="transform") for i in sel: self.Scroll_Sorce_List_02.addItem(i) def Exe(self): items = [] items_02 = [] if not self.Scroll_Sorce_List.count() == self.Scroll_Sorce_List_02.count(): print "Not Match" else: for index in xrange(self.Scroll_Sorce_List.count()): items.append(self.Scroll_Sorce_List.item(index)) for index in xrange(self.Scroll_Sorce_List_02.count()): items_02.append(self.Scroll_Sorce_List_02.item(index)) for i in xrange(len(items)): Left = items[i].text() Right = items_02[i].text() cmds.parentConstraint(Left,Right) if __name__ == '__main__': form = Ui_MainWindow() form.show()
起動するとこんな感じ。
オブジェクトをAddボタンで足せます。
最後に下部のボタンを押すと、ペアレントコンストレイントが掛かります。
テコレになっていれば、複数も可能です。
逆にちぐはぐなリストだったら、エラーを返します。
チェックボックスとか付けると、リグなどに使えますね。
というか、これの拡張版を今使ってます。
さぁ。
細かく見ていくと、初期化部分の箇所から
self.resize(500,400)
この部分は、ウィンドウの全体サイズを指定しています。
XYとなるので、横500縦400のウィンドウサイズに変更しています。
self.All_Layout = QVBoxLayout() self.main_layout = QHBoxLayout()
コメントアウトにても記載していますが
All_Layoutが全体を縦で管理しているレイアウトで
main_layoutがパーツを纏めた横のレイアウトです。
イメージですが、こんな感じ。
図で見るとわかりやすいですね。
後は、図通りに追加するだけですね。
なので、次はボタン押したときの挙動の一部を…
self.Scroll_Sorce_List.addItem(i) self.Scroll_Sorce_List_02.addItem(i)
変数iということは選択したものを
スクロールリストに追加するといった流れになります。
addItemって解りやすいっよね。
後は特に説明は入らない気がするので、割愛。
こんな感じで、PySideでUI組む流れになりました。
次は、Qtdesignerで作成されたUIをMAYAに持ち込んでみたいと思います。
以上です。