python - 等到 QtWidgets.QMainWindow 关闭后再继续
问题描述
我有一个PyQt5
窗口,它将打开一个我创建的对话框窗口,它只是要求用户做某事并单击一个关闭窗口的按钮。这两个窗口是用class RenameDialog(QtWidgets.QMainWindow):
和制成的class Prog(QtWidgets.QMainWindow):
。在Prog
,我有self.renameDialog = RenameDialog(self)
。在我的一段代码中
self.renameDialog.show()
#Other code to run after renameDialog window is closed
但这不起作用,因为我不知道如何等到renameDialog
关闭。我self.renameDialog.setWindowModality(QtCore.Qt.WindowModality)
之前尝试过put self.renameDialog.show()
,我试图弄清楚如何使用.exec_()
,但不知道在这种情况下我可以在哪里使用这种方法。有没有办法等到它QtWidgets.QMainWindow
被隐藏或销毁后再继续代码?
解决方案
这里有两种可能。
1.您可以将对话框设置为模态。在这种情况下,与 GUI 的任何其他交互都会被阻止,直到用户关闭对话框。只有这样代码才能继续。您需要从 QDialog 继承才能使其工作:
class RenameDialog(QDialog):
# ...
pass
class YourMainWindow(QMainWindow):
def show_dlg(self):
dlg = RenameDialog(self)
res = dlg.exec()
if res == QDialog.Accepted:
print('Accepted')
else:
print('Rejected')
- 连接到对话框的finished()信号。这样,对话框不必是模态的,您仍然可以与 GUI 的其余部分进行交互。当用户关闭对话框时,
finished
会触发信号并调用连接的回调函数。
推荐阅读
- json - 从 API Swift 特殊类型问题解码 JSON 文件
- c++ - 如何使用 lambda 捕获可变参数并将它们传递给内部范围
- ruby-on-rails - Rails 5 升级 - 控制器测试失败
- r - 运行 Motif 分析时 RStudio 出现“致命错误” - 需要故障排除建议
- javascript - 如何从firebase获取数据我尝试了很多次但没有访问?
- python - 图像作为轴值
- java - 错误:(47,52)java:无法访问 com.mongodb.ConnectionString - 尝试将 MongoDB 连接到 Java Maven 项目
- python - Python网页抓取多个页面
- svg - TabBar 中的 SwiftUI SVG
- python - 100个套接字连接后,nginx无法连接到uwsgi