sakura32 发表于 2023-4-23 10:00

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的命令行程序,测试下来文件窗口不会假死,不知道是哪里出问题了。

wuyi123456 发表于 2023-4-23 10:33

程序在使用多线程时,可能存在线程不安全的问题,导致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)
这样应该就能解决窗口假死的问题了。

laos 发表于 2023-4-23 11:31

wuyi123456 发表于 2023-4-23 10:33
程序在使用多线程时,可能存在线程不安全的问题,导致UI界面假死。

建议使用Qt的线程类QThread来实现多 ...

这是ChatGPT回答?
页: [1]
查看完整版本: python调用7zip解压文件,文件夹假死