12,796
回編集
71行目: | 71行目: | ||
<br> | <br> | ||
なお、Qt (PySide6の基盤となっているフレームワーク) 自体には商用ライセンスも存在するが、PySide6はLGPLで提供されているため、LGPLの条件を満たせば商用利用も可能である。<br> | なお、Qt (PySide6の基盤となっているフレームワーク) 自体には商用ライセンスも存在するが、PySide6はLGPLで提供されているため、LGPLの条件を満たせば商用利用も可能である。<br> | ||
<br><br> | |||
== Qt Widgetsアプリケーションの作成 == | |||
<syntaxhighlight lang="python"> | |||
import sys | |||
import random | |||
// PySide6モジュールは、サブモジュールとしてQt APIへのアクセスを提供する | |||
// QtCore、QtWidgets、QtGuiのサブモジュールをインポートする | |||
from PySide6 import QtCore, QtWidgets, QtGui | |||
// QWidgetクラスを継承する | |||
// 基本的なUI (QPushButton, QLabel) を含む | |||
class MyWidget(QtWidgets.QWidget): | |||
def __init__(self): | |||
super().__init__() | |||
self.hello = ["Hallo Welt", "Hei maailma", "Hola Mundo", "Привет мир"] | |||
self.button = QtWidgets.QPushButton("Click me!") | |||
self.text = QtWidgets.QLabel("Hello World", alignment=QtCore.Qt.AlignCenter) | |||
self.layout = QtWidgets.QVBoxLayout(self) | |||
self.layout.addWidget(self.text) | |||
self.layout.addWidget(self.button) | |||
self.button.clicked.connect(self.magic) | |||
// QPushButtonを押下する時、magicメソッドが呼び出される | |||
@QtCore.Slot() | |||
def magic(self): | |||
self.text.setText(random.choice(self.hello)) | |||
if __name__ == "__main__": | |||
app = QtWidgets.QApplication([]) | |||
widget = MyWidget() | |||
widget.resize(800, 600) | |||
widget.show() | |||
sys.exit(app.exec()) | |||
</syntaxhighlight> | |||
<br><br> | |||
== Qt QMLアプリケーションの作成 == | |||
QQmlApplicationEngineクラスをインスタンス化して、QMLファイルを読み込む。<br> | |||
<br> | |||
<syntaxhighlight lang="python"> | |||
import sys | |||
from PySide6.QtGui import QGuiApplication | |||
from PySide6.QtQml import QQmlApplicationEngine | |||
if __name__ == "__main__": | |||
app = QGuiApplication(sys.argv) | |||
engine = QQmlApplicationEngine() | |||
engine.addImportPath(sys.path[0]) | |||
engine.loadFromModule("Example", "Main") | |||
if not engine.rootObjects(): | |||
sys.exit(-1) | |||
exit_code = app.exec() | |||
del engine | |||
sys.exit(exit_code) | |||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="qml"> | |||
import QtQuick | |||
import QtQuick.Controls | |||
import QtQuick.Layouts | |||
Window { | |||
width: 300 | |||
height: 200 | |||
visible: true | |||
title: "Hello World" | |||
readonly property list<string> texts: ["Hallo Welt", "Hei maailma", "Hola Mundo", "Привет мир"] | |||
function setText() { | |||
var i = Math.round(Math.random() * 3) | |||
text.text = texts[i] | |||
} | |||
ColumnLayout { | |||
anchors.fill: parent | |||
Text { | |||
id: text | |||
text: "Hello World" | |||
Layout.alignment: Qt.AlignHCenter | |||
} | |||
Button { | |||
text: "Click me" | |||
Layout.alignment: Qt.AlignHCenter | |||
onClicked: setText() | |||
} | |||
} | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
Qt WidgetsならびにQt QMLのサンプルコードの詳細を知りたい場合は、[https://doc.qt.io/qtforpython-6/examples/index.html Qtの公式ドキュメント]を参照すること。<br> | |||
<br><br> | <br><br> | ||