はじめに
メリークリスマス
この記事はMaya Advent Calender 2023の25日目の記事になります。
今年も@9boz さんが大量の記事をアップしていて凄いなと感じる年でしたね!
それに比べて僕はトリにも拘らず大した情報しか持ってきてませんがご容赦下さい。
Mayaでログインしているアカウントのユーザー名を取得する
もしかしたら既にこういうことをやってる人は多いかもしれませんが、
私がMaya get login name [検索]
した限りではこちらの記事のしか見つけられませんでした。
https://forums.autodesk.com/t5/maya-programming/get-autodesk-account-username-via-mel-python/td-p/10568045
この記事の中で紹介されているcmds.licenseとcmds.aboutも調べてみましたが、licenseのほうはどうやらもう使われていなさそうな雰囲気を醸し出していて、aboutのほうは使われてはいそうですが目的としているユーザー名を取得する方法はありませんでした。
なので、何とか取得できないか試してみました。
環境
Maya2023.3
結論(コード)
import maya.OpenMayaUI as omui
import shiboken2
from PySide2 import QtWidgets
def getLoginUserName():
ptr = omui.MQtUtil_findControl('AdlSdkFixedCtrl')
accountCtrl = shiboken2.wrapInstance(int(ptr), QtWidgets.QPushButton)
return accountCtrl.text()
if __name__ == '__main__':
print(f'僕の名前は{getLoginUserName()}だよ')
解説
MayaのUI要素の殆どはPySideで構成されています。
そのため、ユーザー名が表示されている箇所のWidgetのobjectNameさえ特定できればそこからtextを取得することが出来そうだと考えました。
そこで、@UnitBus さんが公開されているPySideのWidget一覧を取得できるツールを使用させていただき1、根気強く探しました。
恐らくこれっぽい?というものを見つけ、後はその周辺の要素のtypeやtextの内容を調べてAdlSdkFixedCtrl
がユーザー名の文字列情報を持ったWidgetだということが特定できました。
そして、結論のコードに至るわけです。
めでたしめでたし!
おわりに
ユーザー名に限らずMayaのUI要素として表示されている情報の殆どは同様の手順で取得できそうです。
そして、WidgetのobjectNameを調べるための手段として@UnitBus さんのツールは非常に便利で助かりました。この場を借りて感謝いたします。
最後に、Maya Adovent Calendar2023、完走お疲れ様でした!
参加された皆さんの1年に幸多からんことをお祈り申し上げます。
-
ツールのサポートバージョンがMaya2016~2019までのPython2環境のため、当たり前ですが私の動作環境ではエラーが出て動作しませんでした。そのため、簡単な手直しをして最低限の動作をするところまで修正する必要がありました。本来はtextやtypeもUI上に表示されるようなので本文中のように泥臭く要素を調べる必要はなさそうです。便利! ↩