本腰を入れてMaxでPythonをいじってみようと
とりあえずUIの作成を色々とお試し中。
まず、超簡単にUIを作ってみる。
関連記事はデジフロさんがいっぱい出してくださっていて
めちゃくちゃ勉強になる。
参考にさせていただきました。
ありがとうございます!
で、自分なりに一から書いてみた。
こんな感じ。
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クラスを継承してるってことになる。
クラス化することで後々の拡張性を持たせることが出来そう。
そのあたりは今度のお楽しみ。
以上メモでした。