欢迎访问宙启技术站
智能推送

Python中使用PyQtGraphPyQt5.QtGui.QMainWindow创建和管理多个子窗口

发布时间:2023-12-13 12:39:49

在Python中,我们可以使用PyQtGraph和PyQt5中的QMainWindow创建和管理多个子窗口。PyQtGraph是一个用于在PyQt5中绘制高性能科学和工程图形的库,而QMainWindow则是PyQt5中的一个主窗口类,用于创建应用程序的主窗口界面。

下面是一个使用PyQtGraph和QMainWindow创建和管理多个子窗口的例子:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, QMdiArea, QMdiSubWindow
from PyQt5 import QtCore, QtGui
import pyqtgraph as pg


class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()

        # 创建菜单栏
        self.menu = self.menuBar()
        self.file_menu = self.menu.addMenu('File')

        # 创建子窗口区域
        self.mdi_area = QMdiArea()
        self.setCentralWidget(self.mdi_area)

        # 添加菜单栏中的动作
        self.add_child_window_action = QAction('Add Child Window', self)
        self.file_menu.addAction(self.add_child_window_action)
        self.add_child_window_action.triggered.connect(self.add_child_window)

    def add_child_window(self):
        # 创建子窗口
        child_window = QMdiSubWindow()
        child_window.setWindowTitle('Child Window')
        child_window.setWidget(self.create_child_widget())
        self.mdi_area.addSubWindow(child_window)
        child_window.show()

    def create_child_widget(self):
        # 创建子窗口中的widget
        layout = QtGui.QVBoxLayout()
        graph_widget = pg.PlotWidget()
        layout.addWidget(graph_widget)

        # 添加一个简单的sin函数曲线
        x = [i * 0.1 for i in range(100)]
        y = [QtCore.qSin(i) for i in x]
        graph = pg.PlotDataItem(x, y)
        graph_widget.plotItem.addItem(graph)

        widget = QtGui.QWidget()
        widget.setLayout(layout)

        return widget


if __name__ == '__main__':
    app = QApplication(sys.argv)
    main_window = MainWindow()
    main_window.show()
    sys.exit(app.exec_())

在这个例子中,我们首先创建了一个继承自QMainWindow的MainWindow类。在MainWindow类的构造函数中,我们创建了菜单栏和子窗口区域,然后添加了一个用于创建子窗口的动作。在add_child_window方法中,我们创建了一个QMdiSubWindow并将其添加到子窗口区域中,然后通过调用show方法显示子窗口。

create_child_widget方法用于创建子窗口中的widget,在这个例子中,我们创建了一个垂直布局,并在其中添加了一个PlotWidget。我们使用pyqtgraph库绘制了一个sin函数的曲线,并将其添加到PlotWidget中。

在主函数中,我们创建了一个QApplication对象和MainWindow对象,并通过调用show方法显示主窗口。

当我们运行程序时,会显示一个带有菜单栏和子窗口区域的主窗口。点击菜单栏中的"Add Child Window"动作时,程序会创建一个新的子窗口,并在其中显示一个带有sin函数曲线的PlotWidget。

这就是使用PyQtGraph和QMainWindow创建和管理多个子窗口的简单例子。你可以根据需要进行修改和扩展,以满足你的实际需求。