在前一篇教程中,我们探讨了如何在PyQt5中进行自定义事件处理
,了解事件是如何被触发和处理的。在这一节中,我们将重点学习如何创建一个简单的多窗口应用程序。在之后的教程中,我们还会讨论窗口之间的通信。这将使我们能够构建更复杂的应用程序。
多窗口应用基本概念
在PyQt5中,创建一个多窗口应用主要涉及以下几个步骤:
- 创建多个窗口类:每个窗口通常是一个
QWidget
的子类。
- 管理窗口显示:通过创建窗口实例并控制其显示来管理多个窗口。
- 交互设计:创建能够打开新窗口的按钮和其他控件。
示例应用:多窗口文本编辑器
接下来,我们将通过创建一个简单的文本编辑器示例,来实现一个多窗口应用。这些窗口包括主窗口和一个用于编辑的子窗口。
第一步:创建主窗口
首先,我们创建一个主窗口,它包含一个按钮,当点击此按钮时,打开一个文本编辑窗口。
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_())
|
代码讲解
- **主窗口 (
MainWindow
)**:它是整个应用程序的主界面,初始化时设置窗口标题和尺寸,并创建一个按钮。
- 打开子窗口:当点击按钮时,
openTextEditWindow
方法会被调用,进而创建TextEditWindow
类的实例,并显示它。
- **文本编辑窗口 (
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)
|
新增代码讲解
- 按钮显示文本:在
TextEditWindow
中添加了一个新的按钮show_button
,用于显示文本。
- 展示文本的新窗口:创建了一个新的窗口
TextDisplayWindow
来展示用户在QTextEdit
中输入的文本内容。
总结
在这一节中,我们成功创建了一个多窗口应用,用户可以从主窗口打开文本编辑窗口,并在编辑窗口中输入内容,最后通过点击按钮在新窗口中查看这些文本。这样不仅了解了如何生成多窗口应用,也为下篇窗口间的通信
打下了基础。
在接下来的教程中,我们将探讨如何让这些窗口之间进行通信,使得它们能够更好地协作,形成更为复杂的应用逻辑。保持关注!