好的,让我们一步一步来实现这个需求。首先,我们创建一个名为`BaseWindow`的基础窗口类,它将包含ESC事件和退出按钮。然后,我们创建`WindowA`和`WindowB`两个子窗口类,分别用于登录和进度显示。最后,在每个窗口的底部添加一个进度条,以及在适当的时候打开下一个窗口。
以下是示例代码:
import sys
import time
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QProgressBar, QWidget
class BaseWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Base Window")
self.resize(1440, 900)
# 添加ESC事件
self.setFocusPolicy(Qt.StrongFocus)
self.keyPressEvent = self.handle_escape
# 添加退出按钮
exit_button = QPushButton("退出")
exit_button.clicked.connect(self.close)
self.addToolBar().addWidget(exit_button)
# 添加欢迎界面
welcome_widget = QWidget()
welcome_layout = QVBoxLayout()
welcome_layout.addWidget(QPushButton("欢迎界面"))
welcome_widget.setLayout(welcome_layout)
self.setCentralWidget(welcome_widget)
def handle_escape(self, event):
if event.key() == Qt.Key_Escape:
self.close()
class WindowA(BaseWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Window A")
# 创建按钮
button = QPushButton("进入下一个窗口")
button.clicked.connect(self.show_progress)
self.centralWidget().layout().addWidget(button)
def show_progress(self):
progress = QProgressBar()
self.centralWidget().layout().addWidget(progress)
self.update_progress(progress)
def update_progress(self, progress):
for i in range(101):
time.sleep(0.05) # 模拟进度更新时间
progress.setValue(i)
QApplication.processEvents()
self.close()
window_b = WindowB()
window_b.show()
class WindowB(BaseWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Window B")
# 创建按钮
button = QPushButton("进入下一个窗口")
button.clicked.connect(self.show_progress)
self.centralWidget().layout().addWidget(button)
def show_progress(self):
progress = QProgressBar()
self.centralWidget().layout().addWidget(progress)
self.update_progress(progress)
def update_progress(self, progress):
for i in range(101):
time.sleep(0.05) # 模拟进度更新时间
progress.setValue(i)
QApplication.processEvents()
self.close()
if __name__ == "__main__":
app = QApplication(sys.argv)
base_window = BaseWindow()
base_window.show()
sys.exit(app.exec())
这段代码演示了如何创建三个窗口,并在不同的时机打开下一个窗口。`BaseWindow`是基础窗口类,包含ESC事件和退出按钮。`WindowA`和`WindowB`分别继承自`BaseWindow`,并在右下角添加一个按钮。当按钮按下时,将显示一个进度条,模拟进度加载过程。当进度条达到100%时,关闭当前窗口,并打开下一个窗口。请注意,为了演示进度条的更新,我们使用了`time.sleep()`函数暂停了一段时间。
希望这个示例能帮助你实现你的需求,如果有任何问题或需要进一步帮助,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |