📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| (同じ利用者による、間の2版が非表示) | |||
| 71行目: | 71行目: | ||
<br> | <br> | ||
なお、Qt (PySide6の基盤となっているフレームワーク) 自体には商用ライセンスも存在するが、PySide6はLGPLで提供されているため、LGPLの条件を満たせば商用利用も可能である。<br> | なお、Qt (PySide6の基盤となっているフレームワーク) 自体には商用ライセンスも存在するが、PySide6はLGPLで提供されているため、LGPLの条件を満たせば商用利用も可能である。<br> | ||
<br> | |||
==== 組み込み機器で使用する場合 ==== | |||
LGPLライセンスの基本要件として、以下に示すような配置が必要となる。<br> | |||
<br> | |||
ソフトウェア本体と共に、LGPLライセンスのテキストを提供する必要がある。<br> | |||
* 製品付属のドキュメント(取扱説明書など)にライセンステキストを掲載する。 | |||
* 製品内の読み取り可能なファイルシステム上にライセンスファイルを配置する。 | |||
* 製品のUIからアクセス可能なメニューやページでライセンス情報を表示する。 | |||
<br> | |||
さらに、以下に示すような情報へのアクセス方法も提供する必要がある。<br> | |||
* PySide6のソースコードの入手方法 | |||
* 使用しているPySide6のバージョン情報 | |||
* PySide6モジュール本体に改変を加えた場合は、その改変内容 | |||
<br> | |||
<syntaxhighlight lang="python"> | |||
# 実装の具体例 | |||
# ライセンス情報を表示するための関数例 | |||
def show_license_info(): | |||
license_text = """ | |||
PySide6 is licensed under the GNU Lesser General Public License v3. | |||
Complete license text can be found at: | |||
/usr/share/licenses/PySide6/LICENSE | |||
Source code is available at: | |||
https://download.qt.io/official_releases/QtForPython/ | |||
Version: PySide6 6.x.x | |||
""" | |||
# UIでの表示やファイル出力等の処理 | |||
# ...略 | |||
</syntaxhighlight> | |||
<br> | |||
組み込み機器の特性上、全てのソースコードを機器内に保存することが現実的でない場合は、Webサイトでの提供や要求に応じて提供する方法も認められている。<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> | ||