ショートカットでウインドウを表示させる方法!!

takkun
どうも!たっくんです!

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」が実行される状態にして試しました!(`・ω・´)ゞ