QMessageBox() 弹窗点确定后 就卡死了 threading 也不行
时间: 2023-11-11 07:07:44 浏览: 134
Qt之QMessageBox 自定消息提示框(二)
这种情况可能是因为你在主线程中执行了耗时的操作,导致主线程被阻塞。你可以尝试使用多线程来解决这个问题,将耗时的操作放在子线程中执行。
具体的做法是,将弹窗操作放在主线程中执行,然后在弹窗中启动一个子线程来执行耗时的操作。这样,弹窗就不会被卡死了。
以下是一个示例代码:
```python
import threading
from PyQt5.QtWidgets import QApplication, QMessageBox
def long_time_operation():
# 执行耗时的操作
pass
def show_message_box():
msg_box = QMessageBox()
msg_box.setText("确定要执行操作吗?")
msg_box.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
ret = msg_box.exec_()
if ret == QMessageBox.Ok:
# 在子线程中执行耗时的操作
t = threading.Thread(target=long_time_operation)
t.start()
if __name__ == '__main__':
app = QApplication([])
show_message_box()
app.exec_()
```
在这个示例代码中,我们定义了一个 `long_time_operation` 函数来模拟耗时的操作。在 `show_message_box` 函数中,我们先弹出一个消息框询问用户是否要执行操作,然后在用户点击确定后,启动一个子线程来执行 `long_time_operation` 函数。这样,就可以避免弹窗被卡死的问题。
阅读全文