Mayaでも使えるQt(PySide)のクロスプラットフォームな便利機能

自前でクロスプラットフォーム対応してたのにこの機能Qtにあったのかよ!な小ネタです。

クリップボードにテキストをコピーする

今編集してるシーンのパスをささっと共有したいなーというときクリップボードにコピーできると便利ですが、自前でやる場合subprocess使うことになるしWindowsとMacで使うコマンドが違って面倒…。
でも実は1つのコードで出来るんです。そう、Qtならね!(もっと早く知りたかった)

以下のようなコードを用意してcmds.file(q=True, sn=True)とかを引数に渡してやるだけです。かんたん。

Maya2016以前(PySide)

from PySide import QtGui
def copy_to_clipboard(text):
    cb = QtGui.QApplication.clipboard()
    cb.setText(text)

Maya2017以降(PySide2)

from PySide2 import QtWidgets
def copy_to_clipboard(text):
    cb = QtWidgets.QApplication.clipboard()
    cb.setText(text)

Qt.py版

from Qt import QtWidgets
def copy_to_clipboard(text):
    cb = QtWidgets.QApplication.clipboard()
    cb.setText(text)

Qt.pyについては以下をご参照ください。
tm8r.hateblo.jp

指定フォルダをFinder(エクスプローラー)で開く

Maya内に自前のファイルエクスプローラー的なものを実装したものの、そこで開いているフォルダをさくっとFinderで開きたいみたいなことがあると思うんですが、これもクリップボード同様にsubprocessごにょったり、またWinとMacで別のコード書いたりしないといけないので大変面倒です。
でも実は(略)

Maya2016以前(PySide)

from PySide import QtGui
def reveal_in_finder(path):
    QtGui.QDesktopServices.openUrl("file:///" + path)

Maya2017以降(PySide2)

from PySide2 import QtGui
def reveal_in_finder(path):
    QtGui.QDesktopServices.openUrl("file:///" + path)

Qt.py版

from Qt import QtGui
def reveal_in_finder(path):
    QtGui.QDesktopServices.openUrl("file:///" + path)

おわり

よくよく考えたらQt自体がクロスプラットフォームなフレームワークなので、こういった汎用的な機能は色々持ってるんでしょうけども、どうしてもUI構築の方にばっかり気を取られてそれ以外の機能を探すのを忘れがち。
暇な時にリファレンスを眺めると色んな発見がありそうなので、また何か見つけたら書きます…!たぶん…!

スポンサーリンク