どうも!たっくんです!
Qt(PySide/PyQt)を経由して、ショートカットキーが押されたらツールのウインドウがでるのって、便利だしカッコイイですよね!
今回は、そんな方法をご紹介したいと思います!(`・ω・´)ゞ
ウインドウの作成
「フォーカスが外れると消えるウインドウを作る方法!!」でご紹介した、フォーカスが外れると消えるウインドウを元にしたいと思います!
from PySide import QtCore, QtGui from maya import OpenMayaUI import shiboken class MainWindow(QtGui.QDialog): def __init__(self, *args, **kwargs): super(MainWindow, self).__init__(*args, **kwargs) self.setWindowFlags(QtCore.Qt.Tool|QtCore.Qt.FramelessWindowHint) self.installEventFilter(self) def eventFilter(self, object, event): if event.type() == QtCore.QEvent.WindowDeactivate: self.close() elif event.type() == QtCore.QEvent.FocusOut: self.close() else: return super(MainWindow, self).eventFilter(object, event) def getMayaWindow(): ptr = OpenMayaUI.MQtUtil.mainWindow() widget = shiboken.wrapInstance(long(ptr), QtGui.QMainWindow) return widget def main(): w = MainWindow(getMayaWindow()) w.show() w.activateWindow()
ウインドウを表示するコードを、関数「main」にまとめました。
ショートカットの追加
ショートカットを登録するには、Mayaのウインドウを「QMainWindow」として取得し、QActionを登録します。QActionの説明は、各コメントをご参照ください(`・ω・´)ゞ
from PySide import QtCore, QtGui from maya import OpenMayaUI import shiboken class MainWindow(QtGui.QDialog): # ~中略~ def getMayaWindow(): # ~中略~ def installHotkey(): mayaWindow = getMayaWindow() # Mayaのウインドウを親にQActionを作成 action = QtGui.QAction(mayaWindow) # Actionのショートカットを、Ctrl+Tabで登録 action.setShortcut(QtGui.QKeySequence(QtCore.Qt.CTRL+QtCore.Qt.Key_Tab)) # ショートカットのコンテキストを、ApplicationShortcutに設定 action.setShortcutContext(QtCore.Qt.ApplicationShortcut) # ショートカットが押された時の処理を、関数「main」に設定 action.triggered.connect(main) # Mayaのウインドウに、QActionを登録 mayaWindow.addAction(action) def main(): # ~中略~
実験!
Mayaが起動したら、関数「installHotkey」が実行される状態にして試しました!(`・ω・´)ゞ