[PySide] Windowを複数表示しない方法

MayaCmdsとかでUIを作る場合は、

みたいにすれば、すでにUIがある場合削除してから新しいUIを開く…みたいな事が出来るのですが
PySideでやった場合は方法が分からず複数UIがでるのを放置してました。
が、やり方が分かったのでメモ。

まずやりかたその1

try~except:を使用して、無理矢理close()する。
一応こうれでも出来ます。
できるんですが、global使わないといけないしあまり美しくないです。

こちらは修正版。
MayaのMainWindowのWindowを取得して、その子Windowから消したいWindowを探して消す…というので、やりたい事が出来ました。
findChildrenの引数は、探したいクラス名を入れます。
今回の場合、消したいUIは testUIクラスとして作成しているので、findChildrenの引数は testUI を入れています。
findChildren() を使用すると、複数の子を取得、findChildだと、子を1つだけ取得します。
ので、この場合かならず1つしかWindowは作成されないはずなので、forを使用しないで

でも良いきがします。たぶん。

そんな感じで、分かってしまえば そっかー 程度なんですが
そこに至るまでは大変ですね。

追記。

すでにある場合は捨てる 処理はクラスの中にあったほうが便利だなーということで、ちょっと修正してみました。

なんとなーくリスト内包表記を使って1行にしてみました。
コレが一番使いやすいかな~?

コメントを残す

メールアドレスが公開されることはありません。


*