当同时存在 dialog.exec()
和 app.exec()
时,这两个事件循环会相互影响,导致应用程序在关闭对话框后无法正常退出。这是因为 dialog.exec()
会启动模态对话框的事件循环,而 app.exec()
则启动主事件循环。
问题代码:
app = QApplication([])
dialog = QDialog()
layout = QVBoxLayout()
button_accept = QPushButton("Accept")
button_reject = QPushButton("Reject")
layout.addWidget(button_accept)
layout.addWidget(button_reject)
dialog.setLayout(layout)
# 连接接受和拒绝按钮的信号与槽
button_accept.clicked.connect(dialog.accept)
button_reject.clicked.connect(dialog.reject)
dialog.setWindowModality(Qt.ApplicationModal)
# 显示对话框并等待其关闭
result = dialog.exec()
if result == QDialog.Accepted:
print("Dialog was accepted.")
else:
print("Dialog was rejected.")
app.exec()
解决方案:在另一个分支手动quit程序或只在需要继续展示其他窗口的分支使用app.exec()