Qtブログ(日本語)

Hello Qt for Python

作成者: 鈴木 佑|Sep 5, 2018 6:58:18 AM

この記事は The Qt BlogHello Qt for Python を翻訳したものです。
執筆: Cristián, 2018年05月04日

Qt for Python のテクノロジープレビューのリリースが迫って来たのに伴い、Python の世界 へのドアの開け方を簡単に紹介したいと思います。

早速ですが、QWidgets を使って Qt for Python の簡単さを実感してみましょう。

すべてのスクリプトはだいたい以下のような構成になっています:

  1. QApplication のインスタンスを生成します
  2. QWidgets の中から使用したいもの(QLabelなど)をインポートします
  3. アプリケーションを表示し、QApplication を実行します

これらをまとめると、以下のようになります。

# hello_world.py
from PySide2.QtWidgets import QApplication, QLabel

app = 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 を基底クラスとしてその中に QLabelQPushButton を配置しました。

このアプリケーションは以下のとおりとてもシンプルです:

  1. 初めに、Hello World をいくつかの言語に翻訳したもののリストを記述しました
  2. 次に、QPushButtonQLabel を所定の引数で初期化し、フォントやサイズの設定を行いました
  3. その後、QVBoxLayout を生成し、必要な部品をそこに含めて、このレイアウトを割り当てました
  4. 最後に、QPushButtonclicked() シグナルを magic という名前の独自のメソッドと接続しました

これにより、ボタンをクリックするたびに、ランダムな言語での Hello World が表示されます!

今回のシンプルなスクリプトが、Qt for Python で書かれるほとんどのアプリケーションの雛形となります。Qt for Python がリリースされ次第、すぐにお試しいただければと思います。