標準のデスクトップ(つまりウィンドウ管理)環境で動作するときに完全に動作するマルチウィンドウPyQt5(Python 3.6.2 with Qt 5.9.0)アプリケーションがあります。ターゲットプラットフォームは、X11ウィンドウシステムを使用しない埋め込み型デバイス(Raspberry Pi、i.MX6など)です。私は現在、複数のウィンドウをサポートしていないeglfsプラットフォームで組み込みデバイスをテストしています。私はQtWaylandプラットフォームを使用するか、QtStackedWidgetを使用してスタック内の個々のページとして 'windows'を格納する方法を変更しています。マルチウィンドウPyQtアプリケーションにQStackedWidgetを使用
以下の高レベルウィンドウアプリケーションを変更して、QStackedWidgetの配置を活用して、ウィンドウレス環境でマルチページアプリケーションを容易にする方法はありますか?
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow
from ui_Main import Ui_Main
from ui_Window1 import Ui_Window1
from ui_Window2 import Ui_Window2
class Main(QMainWindow, Ui_Main):
def __init__(self, parent=None):
super(Main, self).__init__(parent)
self.setupUi(self)
#Initialisation functions
self.PushButton1.clicked.connect(self.OpenWindow1)
self.PushButton2.clicked.connect(self.OpenWindow2)
def OpenWindow1(self):
showWindow1.show()
def OpenWindow2(self):
showWindow2.show()
class Window1(QMainWindow, Ui_Window1):
def __init__(self, parent=None):
super(Window1, self).__init__(parent)
self.setupUi(self)
class Window2(QMainWindow, Ui_Window2):
def __init__(self, parent=None):
super(Window2, self).__init__(parent)
self.setupUi(self)
if __name__ == '__main__':
app = QApplication(sys.argv)
showMain = Main()
showWindow1 = Window1()
showWindow2 = Window2()
showMain.show()
app.exec_()
eglfsプラットフォームに精通していないが、QStackedWidgetを使用することが特に難しいことではありません。ちょうどそれを使用しようとしましたか?それはすべてあなたが達成しようとしているものに依存しますが、一般的にはすべて実行可能でなければなりません。マルチページアプリケーションが意味するものを指定する必要があります。 1つのウィンドウ内でマルチページアプリケーションを実装する1つの方法は、QWizardを使用することです。 – Trilarion
私はQWizardを知らなかったので、それを指摘してくれてありがとう。私が投稿したサンプルコードは、私が達成しようとしている基本的なマルチページ構成を表しています。これにより、アプリケーションの開始時に表示されるメインページと、メインの上に表示される複数のインポートされた外部.pyファイル窓。私はこれらの外部の.pyファイルをインポートすることができるようにしたいと思いますが、それらをメインウィンドウ内にネストします。 – jars121
これをもう少し考えてみましたが、上記のサンプルコードを例として取り上げました。私は、すべての 'windows'に対してすべてのsetupUiが含まれている単一のui_Main.pyファイルを作成し、次に単一のクラスMain()を作成する必要があると思います。 – jars121