PyQtのメインウィンドウからサブウィンドウを作成する方法
PyQtでは、QMainWindowクラスをメインウィンドウに使用し、QWidgetクラスをサブウィンドウに使用できます。
以下、メインウィンドウとサブウィンドウを作成するサンプルコードを示します。
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QPushButton
class ChildWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('Child Window')
self.setGeometry(100, 100, 300, 200)
layout = QVBoxLayout()
button = QPushButton('Close')
button.clicked.connect(self.close)
layout.addWidget(button)
self.setLayout(layout)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('Main Window')
self.setGeometry(100, 100, 500, 400)
self.child_window = ChildWindow()
self.setCentralWidget(self.child_window)
if __name__ == '__main__':
app = QApplication([])
main_window = MainWindow()
main_window.show()
app.exec()
上記コードでは、子ウィンドウとしてQWidgetクラスを継承したChildWindowクラスを作成しています。ChildWindowのコンストラクタでは、子ウィンドウのタイトル、サイズ、レイアウトを設定し、ボタンを追加しています。ボタンのclickedシグナルとself.closeスロット関数の接続も行っています。
メインウィンドウとしてMainWindowクラスをQMainWindowクラスから継承して作成しました。MainWindowのコンストラクタでは、メインウィンドウのタイトルやサイズを指定し、中央ウィンドウとしてChildWindowオブジェクトを作成してself.setCentralWidgetメソッドで中央ウィンドウとして設定しています。
最後に、QApplicationオブジェクトを作成し、MainWindowオブジェクトをインスタンス化して、showメソッドによりメインウィンドウを表示し、最後に、app.execメソッドで主イベントループに遷移します。