Python PySideでMaxのUIを作ってみる


本腰を入れてMaxでPythonをいじってみようと
とりあえずUIの作成を色々とお試し中。

まず、超簡単にUIを作ってみる。

関連記事はデジフロさんがいっぱい出してくださっていて
めちゃくちゃ勉強になる。

参考にさせていただきました。
ありがとうございます!

【3dsMAX】MAXScriptでPythonつかってみた part02【PySide:友愛編】

 

で、自分なりに一から書いてみた。
こんな感じ。

from PySide.QtGui import *
from PySide.QtCore import *

app = QApplication.instance()
if app is None:
app = QApplication([])
window = QMainWindow()
window.setWindowFlags(Qt.WindowStaysOnTopHint)
window.show()
app.exec_()

これをそのままmax上で実行するとこんな感じ。

 

 

よしよし、チャンと動いてくれてるっぽい。
実はこのコード、そのまんまVSコードで実行すると・・・

 

 

なんとそのまま使えた。
おお!これは便利便利!

 

これならpy2exeでexe化も出来そうじゃないか!
UIだけならマルチプラットフォームいけそうですぞ!

と、はしゃいでいたのはココまで・・・

ココからMax2017とMax2018での仕様の違いに
頭を抱える事になる。
2017はPySideで2018はPySide2という仕様変更によって
一工夫加えないと使えないことが判明。

まぁ、その話はまた今度。

 

 

さっきのコードにすこし味足しをしてみる。

import sys
from PySide.QtGui import *
from PySide.QtCore import *


def main():
    """main
    """
    window = QMainWindow()
    window.setWindowFlags(Qt.WindowStaysOnTopHint)
    window.show()
    return window


if __name__ == '__main__':
    app = QApplication.instance()
    if app is None:
        app = QApplication(sys.argv)
    form = main()
    app.exec_()

単純に関数化してみただけ。
ちなみに window.setWindowFlags(Qt.WindowStaysOnTopHint) は
ウィンドウを最前にするという意味。
QApplication(sys.argv) の引数にsys.argvに下のはカッコ付けたかったから。
意味は無い。実行時に引数を受け取りますって意味。

これに更に味付けを加えてみる。

 

 

import sys
from PySide.QtGui import *
from PySide.QtCore import *


class main_ui(QMainWindow):
    """ui_test
    """
    def __init__(self):
        super(main_ui, self).__init__()
        self.init_ui()

    def init_ui(self):
        self.setWindowTitle("make window")


def main():
    """main
    """
    window = main_ui()
    window.setWindowFlags(Qt.WindowStaysOnTopHint)
    window.show()
    return window


if __name__ == '__main__':
    app = QApplication.instance()
    if app is None:
        app = QApplication(sys.argv)
    form = main()
    app.exec_()

今度はクラス化、
ちょっとだけ複雑になった
が、やっていることと結果は同じ。

 

 

よしよしチャンとでてるぞ。

で、味噌は super(main_ui, self).__init__() の部分。
なにかと言うとこれはクラスを継承している部分。
分かりやすい解説はコチラで紹介されていたので参考に。

https://qiita.com/Kodaira_/items/42dfe18c81af98bf0db3

https://www.lifewithpython.com/2014/01/python-super-function.html

簡単に言ってしまえばQMainWindowクラスを継承してるってことになる。

 

クラス化することで後々の拡張性を持たせることが出来そう。
そのあたりは今度のお楽しみ。

 

以上メモでした。

Leave a comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください