25 创建多窗口应用

在前一篇教程中,我们探讨了如何在PyQt5中进行自定义事件处理,了解事件是如何被触发和处理的。在这一节中,我们将重点学习如何创建一个简单的多窗口应用程序。在之后的教程中,我们还会讨论窗口之间的通信。这将使我们能够构建更复杂的应用程序。

多窗口应用基本概念

在PyQt5中,创建一个多窗口应用主要涉及以下几个步骤:

  1. 创建多个窗口类:每个窗口通常是一个QWidget的子类。
  2. 管理窗口显示:通过创建窗口实例并控制其显示来管理多个窗口。
  3. 交互设计:创建能够打开新窗口的按钮和其他控件。

示例应用:多窗口文本编辑器

接下来,我们将通过创建一个简单的文本编辑器示例,来实现一个多窗口应用。这些窗口包括主窗口和一个用于编辑的子窗口。

第一步:创建主窗口

首先,我们创建一个主窗口,它包含一个按钮,当点击此按钮时,打开一个文本编辑窗口。

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
43
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QTextEdit, QVBoxLayout, QWidget

class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("主窗口")
self.setGeometry(100, 100, 400, 300)

self.initUI()

def initUI(self):
button = QPushButton("打开文本编辑窗口", self)
button.clicked.connect(self.openTextEditWindow)

layout = QVBoxLayout()
layout.addWidget(button)

container = QWidget()
container.setLayout(layout)
self.setCentralWidget(container)

def openTextEditWindow(self):
self.textEditWindow = TextEditWindow()
self.textEditWindow.show()

class TextEditWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("文本编辑窗口")
self.setGeometry(150, 150, 300, 200)

self.initUI()

def initUI(self):
self.textEdit = QTextEdit(self)
self.setCentralWidget(self.textEdit)

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

代码讲解

  1. **主窗口 (MainWindow)**:它是整个应用程序的主界面,初始化时设置窗口标题和尺寸,并创建一个按钮。
  2. 打开子窗口:当点击按钮时,openTextEditWindow方法会被调用,进而创建TextEditWindow类的实例,并显示它。
  3. **文本编辑窗口 (TextEditWindow)**:这是一个简单的文本编辑器,使用QTextEdit组件来允许用户输入文本。

第二步:添加更多窗口

接下来,假设我们想添加另一个窗口来展示当前文本的内容。可以通过在TextEditWindow中添加一个按钮来实现这个功能,点击此按钮会打开一个显示文本的窗口。

更新 TextEditWindow

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
class TextEditWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("文本编辑窗口")
self.setGeometry(150, 150, 300, 200)

self.initUI()

def initUI(self):
self.textEdit = QTextEdit(self)
self.setCentralWidget(self.textEdit)

# 添加按钮显示文本
show_button = QPushButton("显示文本", self)
show_button.clicked.connect(self.showTextWindow)

layout = QVBoxLayout()
layout.addWidget(self.textEdit)
layout.addWidget(show_button)

container = QWidget()
container.setLayout(layout)
self.setCentralWidget(container)

def showTextWindow(self):
textToShow = self.textEdit.toPlainText() # 获取文本内容
self.textDisplayWindow = TextDisplayWindow(textToShow)
self.textDisplayWindow.show()

class TextDisplayWindow(QMainWindow):
def __init__(self, text):
super().__init__()
self.setWindowTitle("显示文本窗口")
self.setGeometry(200, 200, 300, 200)

label = QTextEdit()
label.setPlainText(text)
label.setReadOnly(True) # 只读

self.setCentralWidget(label)

新增代码讲解

  1. 按钮显示文本:在TextEditWindow中添加了一个新的按钮show_button,用于显示文本。
  2. 展示文本的新窗口:创建了一个新的窗口TextDisplayWindow来展示用户在QTextEdit中输入的文本内容。

总结

在这一节中,我们成功创建了一个多窗口应用,用户可以从主窗口打开文本编辑窗口,并在编辑窗口中输入内容,最后通过点击按钮在新窗口中查看这些文本。这样不仅了解了如何生成多窗口应用,也为下篇窗口间的通信打下了基础。

在接下来的教程中,我们将探讨如何让这些窗口之间进行通信,使得它们能够更好地协作,形成更为复杂的应用逻辑。保持关注!

25 创建多窗口应用

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

作者

IT教程网(郭震)

发布于

2024-08-10

更新于

2024-08-10

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论