python调用7zip解压文件,文件夹假死
自己做了个解压程序,用qt做了ui,功能是拖入文件到ui里然后调用7zip解压,但是【拖入文件开始解压后,windows文件窗口假死(程序的ui做了多线程没假死),无法拖动窗口+不更新内容】,想问下各位如何解决。调用指令:
zip_command = "x", "-p" + password, "-y", file, "-o" + unzip_path]
result = subprocess.run(zip_command, stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT)
然后自己根据原有代码又做了个不带ui的命令行程序,测试下来文件窗口不会假死,不知道是哪里出问题了。 程序在使用多线程时,可能存在线程不安全的问题,导致UI界面假死。
建议使用Qt的线程类QThread来实现多线程,将文件拖入程序后启动一个新的线程来执行解压任务,并使用信号和槽机制来更新UI界面,这样可以确保UI界面的流畅和线程的安全。
此外,还可以尝试在程序中使用进度条来显示解压进度,这可以提高用户体验和操作便利性。
你可以试着在调用7zip解压的代码之前,将主线程中的GUI事件循环暂停,让操作系统能够有时间来更新窗口。在解压完成后,再恢复GUI事件循环即可。
你可以在解压函数开始的地方添加如下代码:
from PyQt5.QtWidgets import QApplication
# 暂停GUI事件循环
QApplication.processEvents(QApplication.AllEvents, 100)
这里的 processEvents 函数会使QT应用程序处理等待的GUI事件,并让操作系统有机会更新窗口。第一个参数 QApplication.AllEvents 表示处理所有类型的事件,第二个参数 100 表示最长等待时间(毫秒)。
当解压完成后,再将GUI事件循环恢复即可:
QApplication.processEvents(QApplication.AllEvents)
这样应该就能解决窗口假死的问题了。 wuyi123456 发表于 2023-4-23 10:33
程序在使用多线程时,可能存在线程不安全的问题,导致UI界面假死。
建议使用Qt的线程类QThread来实现多 ...
这是ChatGPT回答?
页:
[1]