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创建和管理多个子窗口的简单例子。你可以根据需要进行修改和扩展,以满足你的实际需求。
