上記の例の派生版です。
やりたいこととしては、
- 複数ある QWidget (個々のGUI)を表示
- ここのQWidget はQMainWindowと結合していない
- QMainWindowは与えられた複数の QWidget を表示する
となります。
なお、下記の例ではQMainWindow
自体はGUIとしての役割を持たないため表示させない、という場合を想定しています。
sub_window
にリストの要素として与えるオブジェクトはQWidget
を継承していれば何でもよいため、個々に作ったQWidget
を一気に複数表示できます。
具体的には、異なる種類のグラフや設定・操作画面を想定しています。
もしQMainWindow
のウィンドウも表示させる場合は#w.show()
のコメントアウトを外してください。
import sys from PyQt5.QtWidgets import ( QApplication, QMainWindow, QWidget, QPushButton, QLabel, QVBoxLayout, qApp ) from PyQt5.QtCore import QTimer class SubWindow(QWidget): def __init__(self, N): super().__init__() self.resize(800, 600) # 画面サイズとNに応じて画面の表示位置を決定 geometry = qApp.desktop().screenGeometry() framesize = self.frameSize() x_base = geometry.width() / 2 - framesize.width() / 2 y_base = 0 self.move(x_base + 100*N, y_base + 100*N) layout = QVBoxLayout() self.label = QLabel(f"SubWindow {N}") layout.addWidget(self.label) self.setLayout(layout) class MainWindow(QMainWindow): def __init__(self, sub_window=[]): super().__init__() self.sub_window = sub_window self.show_sub_window() def show_sub_window(self): for w in self.sub_window: w.show() app = QApplication(sys.argv) sub_window = [SubWindow(N=n+1) for n in range(4)] w = MainWindow(sub_window=sub_window) #w.show() app.exec()
なお、画面サイズの設定は以下を参考にしました。