我有一个窗口/小部件在我按下按钮后显示,有没有办法让主窗口等到小部件关闭?我现在正在使用.show()
,我已经尝试过使用.exec_()
,但它给了我这个错误:
AttributeError: 'MainWindow' object has no attribute 'exec_'
有什么帮助吗?
使用本地事件循环等待窗口/小部件关闭:
widget = QWidget()
widget.setAttribute(Qt.WA_DeleteOnClose)
widget.show()
loop = QEventLoop()
widget.destroyed.connect(loop.quit)
loop.exec() # wait ...
print('finished')
要同时阻止与其他窗口的交互,请设置窗口模式:
widget.setWindowModality(Qt.ApplicationModal)
或对于具有父级的顶级窗口:
window.setWindowModality(Qt.WindowModal)
当然,如果您可以将 window/widget 更改为 a QDialog
,那么以上都不是必需的,因为exec提供了相同的功能:
widget = QDialog()
widget.exec() # wait ...