pyside6,包含一个主窗口和三个子窗口,要求点击主窗口关闭按钮时检测所有子窗口是否保存,未保存则弹出对话框,对话框包含是,否,和保存三个按钮;单击单个子窗口关闭按钮是检测该子窗口是否已经保存,如果未保存则弹出提示对话框
时间: 2024-01-30 17:02:31 浏览: 22
好的,您的第一个问题是关于PySide6的主窗口和子窗口的检测保存问题。下面是一个简单的示例代码,演示了如何实现所需的功能:
```python
from PySide6.QtWidgets import QApplication, QMainWindow, QWidget, QMessageBox, QPushButton
from PySide6.QtGui import QIcon
import sys
class ChildWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("子窗口")
self.setGeometry(100, 100, 300, 300)
self.saved = False
def closeEvent(self, event):
if self.saved:
event.accept()
else:
reply = QMessageBox.question(self, '未保存提示', '是否保存窗口内容?',
QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel)
if reply == QMessageBox.Save:
self.save()
event.accept()
elif reply == QMessageBox.Discard:
event.accept()
else:
event.ignore()
def save(self):
# 保存子窗口内容的代码
self.saved = True
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("主窗口")
self.setGeometry(100, 100, 500, 500)
self.child_windows = []
self.initUI()
def initUI(self):
# 添加子窗口按钮
add_button = QPushButton("添加子窗口", self)
add_button.setGeometry(50, 50, 100, 30)
add_button.clicked.connect(self.add_child_window)
# 关闭主窗口按钮
close_button = QPushButton("关闭", self)
close_button.setGeometry(200, 50, 100, 30)
close_button.clicked.connect(self.closeEvent)
def add_child_window(self):
child_window = ChildWindow()
child_window.show()
self.child_windows.append(child_window)
def closeEvent(self, event):
unsaved_windows = []
for child_window in self.child_windows:
if not child_window.saved:
unsaved_windows.append(child_window)
if len(unsaved_windows) == 0:
event.accept()
else:
reply = QMessageBox.question(self, '未保存提示', '是否保存所有窗口内容?',
QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel)
if reply == QMessageBox.Save:
for child_window in unsaved_windows:
child_window.save()
event.accept()
elif reply == QMessageBox.Discard:
event.accept()
else:
event.ignore()
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
```
在这个示例中,我们定义了两个窗口类:`MainWindow`和`ChildWindow`。`ChildWindow`是一个简单的窗口,它具有关闭事件,用于检查窗口是否保存。如果窗口未保存,则弹出确认对话框,询问用户是保存,不保存还是取消操作。`MainWindow`是主窗口,它具有添加子窗口和关闭窗口的按钮。当单击关闭按钮时,它会检查所有子窗口是否保存。如果所有子窗口都已保存,则关闭主窗口。否则,它会弹出确认对话框,询问用户是否保存所有未保存的子窗口。如果用户选择保存,则保存所有未保存的子窗口并关闭主窗口。如果用户选择不保存,则关闭所有未保存的子窗口并关闭主窗口。如果用户选择取消,则取消关闭操作。