吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 758|回复: 2
收起左侧

[求助] python调用7zip解压文件,文件夹假死

[复制链接]
sakura32 发表于 2023-4-23 10:00
自己做了个解压程序,用qt做了ui,功能是拖入文件到ui里然后调用7zip解压,但是【拖入文件开始解压后,windows文件窗口假死(程序的ui做了多线程没假死),无法拖动窗口+不更新内容】,想问下各位如何解决。
调用指令:
zip_command = [zip_path, "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)
这样应该就能解决窗口假死的问题了。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
肖武章 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

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

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

这是ChatGPT回答?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 00:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表