猫とゲームエンジン

今日も猫に面倒みられながら生きてる

画面外のウィンドウを画面内に移動

リモートワークで複数種のレイアウトのウィンドウを行き来してたらアトリビュートエディタが画面外に消えてしまったのでそのための対応。
特に移動したいもののフィルタリングとかしてなく、すべてのウィンドウを移動するので環境によっては弊害がでてしまうかも。

# Maya 消えたウィンドウの呼び出し
from PySide2 import QtCore, QtWidgets, QtGui
active_window = QtWidgets.QApplication.activeWindow()
children = active_window.children()
for child in children:
    if type(child) == QtWidgets.QWidget:
        child.move(0,0)

補足1・ウィンドウ種別ごとのフィルタリング

windowごとにフィルタリングして動作させたい場合はtitleで判定するしかないっぽい?
object name はついてるもとのついてないものがあったりする。(大体ついてない)
継承クラス用意したりはもちろんしてくれてない。

from __future__ import unicode_literals

from PySide2 import QtCore, QtWidgets, QtGui
active_window = QtWidgets.QApplication.activeWindow()
children = active_window.children()
for child in children:
    if type(child) == QtWidgets.QWidget:
        print "-"*20
        print "object name: {}".format(child.objectName())
        print "widget class: {}".format(type(child))
        print "window title : {}".format(child.windowTitle())

上述のようにTitleででとるのが妥当な予感

補足2・cmdsでアクティブなウィンドウ取れなかった

front_window = cmds.window(frontWindow=True)
cmds.showWindow(front_window)

てっきり上記のcmdsだけでアクティブウィンドウを取得できると思ったら自分の環境(Maya2019)だと正常に取得できなかった。
(昔この方法で取得した記憶があるのでバージョンのバグだと思う。詳細は調べてない)