Maya PySide2 / PySide チュートリアル 初学編 ④ – 閉じるボタンを作る
このチュートリアルは閉じるボタンがあるウィンドウの作り方と注意点を学んでいきます
この閉じるボタンにもよくチュートリアルでは使われますがMayaなどのツールでそのまま実行するとMayaが落ちてしまうという罠があります
それについても解説していきます
import sys try: from PySide2.QtWidgets import * from PySide2.QtCore import * except ImportError: from PySide.QtGui import * from PySide.QtCore import * class Example(QWidget): def __init__(self, parent=None, *args, **kwargs): super(Example, self).__init__(parent, *args, **kwargs) self.initUI() def initUI(self): # self.resize(400, 270) # self.move(500, 300) self.setGeometry(500, 300, 400, 270) self.setWindowTitle("Close button") button = QPushButton("close", self) button.move(150, 70) # button.clicked.connect(QCoreApplication.instance().quit) button.clicked.connect(self.close) def main(): app = QApplication.instance() ex = Example() ex.show() sys.exit() app.exec_() main()
クラスに関して
前回と違い今回はクラスで実行していますというのもPySideは基本的にクラスを使ってUIを構築していきます
なのでこれからはクラスを使ったチュートリアルになります
ここが初心者には難しいと言われているというところなのかもしれませんが
あまり身構える必要はありません
クラスを使ったこともない人に上のコードのざっくり説明すると
class Example(QWidget): def __init__(self, parent=None, *args, **kwargs): self.initUI() def initUI(self):
class Example(QWidget):
でExampleというクラスを定義しています
このExampleはQWidgetというクラスを継承しています
継承というのは言葉の通り、QWidgetというクラスを引き継ぎ、新たにExampleというクラスを作っています
そしてクラスの中にクラス内関数と呼ばれる__init__
とinitUI
が定義されていますが
これを説明する前にself
というものを説明する必要があります
selfはクラス自身つまりExampleというクラスになります
つまりself.initUI()
はExample().initUI()
呼び出しますよと定義しているようなものです
ではクラス内関数を説明していきますdef __init__(self, parent=None, *args, **kwargs):
は必ず最初に呼び出される特殊な関数を定義しています
initとは初期化という意味がありdef initUI(self):
は初期化時のUIを定義したいために作ったものです__init__
内に直接定義していないのは煩雑になると読みづらいから外に出したというようなイメージです
ざっくりとした説明ですがクラスに関して詳しく知りたい場合はPythonのドキュメントやクラスに関して説明してくださっているサイト、ブログなどをお読みください
PySideに関して
initUI
には様々なことが定義されています
# self.resize(400, 270) # self.move(500, 300) self.setGeometry(500, 300, 400, 270)
setGeometry(int x, int y, int w, int h)
は、移動イベント(move(500, 300))やリサイズイベント(resize(400, 270))を同時に行うことができます
button = QPushButton("close", self) button.move(150, 70)
QPushButton(const QString &text, QWidget *parent = nullptr)
はコマンドボタンを提供します。
QPushButtonを表示した後、moveでポジションの移動を行っています
# button.clicked.connect(QCoreApplication.instance().quit) button.clicked.connect(self.close)
シグナルとスロット
Qtの機能で重要なシグナルとスロットを定義しています
この機能は、基本的にはウィジェット同士やウィジェットと独自のPythonコードの間の通信を可能にするために使用することができます
今回はボタンを押すとウインドウが閉じるようにしています# button.clicked.connect(QCoreApplication.instance().quit)
とハイドしているコードがあります
これはよくチュートリアルなどで使用されているウインドウを閉じるコードですが、しかしこれを行うとMayaが終了しますのでMayaで行う場合は何かしら書き換えないと意図せずmayaを終了させてしまいます
なのでMayaでウィンドウを閉じる場合はself.close
などに書き換えて実行したりすると意図せずmayaを終了させなくてすみます
Maya PySide2 / PySide チュートリアルのこのパートでは、閉じるボタンがあるウィンドウの作り方と注意点を学び、ウィジェット、プッシュボタン、シグナルとスロットを扱いました
次はMaya PySide2 / PySide チュートリアル 初学編 ⑤
前はMaya PySide2 / PySide チュートリアル 初学編 ③
ディスカッション
コメント一覧
まだ、コメントがありません