27 使用MDI实现多窗口应用

在上一篇文章中,我们探讨了如何实现多窗口应用中的窗口间通信。这一篇将带领大家使用“MDI”(多个文档界面)模式来创建一个多窗口应用程序,MDI 允许多个子窗口在主窗口中同时显示,这样用户可以在同一主窗口中处理多个文档。

什么是MDI?

MDI是一种用户界面设计,允许一个主窗口同时打开多个子窗口。用户可以在主窗口中管理这些子窗口,与此同时,每个子窗口可以独立编辑。

创建MDI应用

在这一部分,我们将使用PyQt5来创建一个简单的MDI应用程序。我们将实现一个主窗口,可以创建多个子窗口,每个子窗口都可以编辑文本。

步骤1:安装 PyQt5

首先,确保已经安装PyQt5。如果还未安装,可以使用以下命令:

1
pip install PyQt5

步骤2:创建基本的MDI主窗口

接下来,我们将创建一个基本的MDI主窗口。在这个窗口中,我们将添加菜单项以创建子窗口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QMdiArea, QMdiSubWindow, QAction, QTextEdit

class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.setWindowTitle("MDI 多窗口应用")
self.setGeometry(100, 100, 800, 600)

# 创建MDI区域
self.mdi_area = QMdiArea()
self.setCentralWidget(self.mdi_area)

# 添加菜单
self.create_menu()

def create_menu(self):
menu_bar = self.menuBar()

# 创建窗口菜单
window_menu = menu_bar.addMenu("窗口")

# 添加子窗口创建动作
new_window_action = QAction("新建子窗口", self)
new_window_action.triggered.connect(self.create_sub_window)
window_menu.addAction(new_window_action)

def create_sub_window(self):
sub_window = QMdiSubWindow()
sub_window.setWindowTitle("子窗口")
text_edit = QTextEdit()
sub_window.setWidget(text_edit)
self.mdi_area.addSubWindow(sub_window)

# 显示子窗口
sub_window.show()

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

解释代码

  • 我们创建了一个MainWindow类,继承自QMainWindow
  • 使用QMdiArea来创建一个多文档界面区域。
  • 在菜单栏添加了一个“窗口”菜单,具有“新建子窗口”的选项。
  • 创建子窗口时,我们使用QMdiSubWindow,并在其中放置了一个QTextEdit以允许用户编辑文本。
  • 新建的子窗口会被添加到MDI区域,并通过调用show()方法显示。

步骤3:子窗口的功能扩展

我们还可以增强子窗口的功能,比如添加保存、关闭等操作。这里我们将实现“保存”功能,让用户可以将编辑的内容保存到文件。

添加一个“保存”菜单到子窗口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 在 MainWindow 类中,创建子窗口时添加保存动作
def create_sub_window(self):
sub_window = QMdiSubWindow()
sub_window.setWindowTitle("子窗口")
text_edit = QTextEdit()
sub_window.setWidget(text_edit)

# 添加保存动作
save_action = QAction("保存", sub_window)
save_action.triggered.connect(lambda: self.save_file(text_edit))
sub_window.menuBar().addAction(save_action)

self.mdi_area.addSubWindow(sub_window)
sub_window.show()

def save_file(self, text_edit):
# 保存文件的逻辑
file_name, _ = QFileDialog.getSaveFileName(self, "保存文件", "", "文本文件 (*.txt);;所有文件 (*)")
if file_name:
with open(file_name, 'w') as f:
f.write(text_edit.toPlainText())

在这个示例中,我们为每个子窗口添加了一个“保存”动作。当用户点击保存时,将调用save_file方法,弹出文件选择对话框,并将文本保存到选定的文件中。

总结

通过这个示例,我们使用 PyQt5 创建了一个简单的 MD I多窗口应用。我们实现了创建子窗口和保存文本的基本功能。在下一篇文章中,我们将进一步探讨如何打包和发布这个应用程序。

MDI 为用户提供了方便的多文档管理功能,为我们的应用程序增加了灵活性。希望以上的代码示例能够帮助你更好地理解和实现MDI应用!

27 使用MDI实现多窗口应用

https://zglg.work/pyqt5-you-need/27/

作者

IT教程网(郭震)

发布于

2024-08-10

更新于

2024-08-10

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论