「Qtその他 - PySide6」の版間の差分

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>