1

我有一个窗口/小部件在我按下按钮后显示,有没有办法让主窗口等到小部件关闭?我现在正在使用.show(),我已经尝试过使用.exec_(),但它给了我这个错误:

AttributeError: 'MainWindow' object has no attribute 'exec_'

有什么帮助吗?

4

1 回答 1

3

使用本地事件循环等待窗口/小部件关闭:

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 ...
于 2013-10-19T15:21:05.173 回答