この記事は The Qt Blog の Hello Qt for Python を翻訳したものです。
執筆: Cristián, 2018年05月04日
Qt for Python のテクノロジープレビューのリリースが迫って来たのに伴い、Python の世界 へのドアの開け方を簡単に紹介したいと思います。
早速ですが、QWidgets を使って Qt for Python の簡単さを実感してみましょう。
すべてのスクリプトはだいたい以下のような構成になっています:
これらをまとめると、以下のようになります。
# hello_world.py
from PySide2.QtWidgets import QApplication, QLabelapp = QApplication([])
label = QLabel("Hello Qt for Python!")
label.show()
app.exec_()
これを実行するのは、単に python hello_world.py を実行するだけです。
もちろん、これでおしまいではありません。重要なことは、Qt のクラスのメソッドにどうやってアクセスするのか? ということです。
プロセスをシンプルにするため、Qt の API はそのままの形を保っています。たとえば、QLabel のサイズを指定する場合、C++ では以下のようにしますよね。
QLabel *label = new QLabel();
label->setText("Hello World!");
label->resize(800, 600);
同様のことを Qt for Python でやる場合は以下のようになります。
label = QLabel()
label.setText("Hello World!")
label.resize(800, 600)
というわけで、C++ と同じということが分かったので、より高度なアプリケーションも書くことができるでしょう。
import sys
import random
from PySide2.QtCore import Qt
from PySide2.QtWidgets import (QApplication, QWidget,
QPushButton, QLabel, QVBoxLayout)class MyWidget(QWidget):
def __init__(self):
QWidget.__init__(self)self.hello = ["Hallo welt!", "Ciao mondo!",
"Hei maailma!", "Hola mundo!", "Hei verden!"]self.button = QPushButton("Click me!")
self.text = QLabel("Hello World")
self.text.setAlignment(Qt.AlignCenter)self.layout = QVBoxLayout()
self.layout.addWidget(self.text)
self.layout.addWidget(self.button)
self.setLayout(self.layout)self.button.clicked.connect(self.magic)
def magic(self):
self.text.setText(random.choice(self.hello))if __name__ == "__main__":
app = QApplication(sys.argv)
widget = MyWidget()
widget.resize(800, 600)
widget.show()
sys.exit(app.exec_())
Qt をあまり知らない方もいるかと思いますが、自分のやりたいことを実現するために既存のクラスを拡張することは一般的なことです。今回のサンプルでは、QWidget を基底クラスとしてその中に QLabel と QPushButton を配置しました。
このアプリケーションは以下のとおりとてもシンプルです:
これにより、ボタンをクリックするたびに、ランダムな言語での Hello World が表示されます!
今回のシンプルなスクリプトが、Qt for Python で書かれるほとんどのアプリケーションの雛形となります。Qt for Python がリリースされ次第、すぐにお試しいただければと思います。