显示提取 .zip 文件的进度 Python Tkinter ProgressBar
Show extracting a .zip file progress Python Tkinter ProgressBar
我正在开发一个提取 zip 文件的程序,我已经完成了这部分工作。但是我想添加一个进度条来显示提取过程的进度。我已经有一个进度条,但它不显示提取的进度。我希望它从点 0 开始,到达点 100,这将是提取完成时的终点。但相反,它只是不断重复从点 0 到点 100,直到提取完成。我该怎么做?
代码:
from threading import Thread
from Tkinter import *
import zipfile
import ttk
class Application(Frame):
def __init__(self, parent):
Frame.__init__(self,parent)
self.pack()
self.create_widgets()
Thread(target=self.startExtr).start()
def create_widgets(self):
self.pBar = ttk.Progressbar(orient=HORIZONTAL, length=200, mode="determinate")
self.pBar.pack(side=BOTTOM)
def startExtr(self):
self.pBar.start()
with zipfile.ZipFile('Kerbal Space Program.zip', "r") as z:
z.extractall("")
self.pBar.stop()
root = Tk()
root.title("Test")
app = Application(root)
root.mainloop()
Zipfile
似乎不包含读取进度的内置方式 (accodering to the docs),因此您可以考虑使用另一个线程 tar让您的脚本一点点地检查在新目录中提取了多少文件。这不适用于处理一个大文件,但您需要使用新库来获得该功能。
我收回那句话。查看 this question 以获得 zip 文件。
this question tar 个文件。
不幸的是,在找到答案后并没有太大帮助:(。但我设法找到了一个非常有帮助的例子,它完全按照我的要求做了!它得到了提取的百分比:)。这是我找到它的地方 link:Monitor ZIP File Extraction Python
这是我的新代码:
from threading import Thread
from Tkinter import *
import zipfile
import time
import ttk
class Application(Frame):
def __init__(self, parent):
Frame.__init__(self,parent)
self.pack()
self.create_widgets()
Thread(target=self.unzip).start()
def create_widgets(self):
self.pBar = ttk.Progressbar(orient=HORIZONTAL, length=200, mode="determinate", maximum=100, value=0)
self.pBar.pack(side=BOTTOM)
def unzip(self):
zf = zipfile.ZipFile('Name of the zip file')
uncompress_size = sum((file.file_size for file in zf.infolist()))
extracted_size = 0
for file in zf.infolist():
extracted_size += file.file_size
percentage = extracted_size * 100/uncompress_size
self.pBar["value"] = percentage
zf.extract(file)
root = Tk()
root.title("Test")
app = Application(root)
root.mainloop()
我正在开发一个提取 zip 文件的程序,我已经完成了这部分工作。但是我想添加一个进度条来显示提取过程的进度。我已经有一个进度条,但它不显示提取的进度。我希望它从点 0 开始,到达点 100,这将是提取完成时的终点。但相反,它只是不断重复从点 0 到点 100,直到提取完成。我该怎么做?
代码:
from threading import Thread
from Tkinter import *
import zipfile
import ttk
class Application(Frame):
def __init__(self, parent):
Frame.__init__(self,parent)
self.pack()
self.create_widgets()
Thread(target=self.startExtr).start()
def create_widgets(self):
self.pBar = ttk.Progressbar(orient=HORIZONTAL, length=200, mode="determinate")
self.pBar.pack(side=BOTTOM)
def startExtr(self):
self.pBar.start()
with zipfile.ZipFile('Kerbal Space Program.zip', "r") as z:
z.extractall("")
self.pBar.stop()
root = Tk()
root.title("Test")
app = Application(root)
root.mainloop()
Zipfile
似乎不包含读取进度的内置方式 (accodering to the docs),因此您可以考虑使用另一个线程 tar让您的脚本一点点地检查在新目录中提取了多少文件。这不适用于处理一个大文件,但您需要使用新库来获得该功能。
我收回那句话。查看 this question 以获得 zip 文件。
this question tar 个文件。
不幸的是,在找到答案后并没有太大帮助:(。但我设法找到了一个非常有帮助的例子,它完全按照我的要求做了!它得到了提取的百分比:)。这是我找到它的地方 link:Monitor ZIP File Extraction Python
这是我的新代码:
from threading import Thread
from Tkinter import *
import zipfile
import time
import ttk
class Application(Frame):
def __init__(self, parent):
Frame.__init__(self,parent)
self.pack()
self.create_widgets()
Thread(target=self.unzip).start()
def create_widgets(self):
self.pBar = ttk.Progressbar(orient=HORIZONTAL, length=200, mode="determinate", maximum=100, value=0)
self.pBar.pack(side=BOTTOM)
def unzip(self):
zf = zipfile.ZipFile('Name of the zip file')
uncompress_size = sum((file.file_size for file in zf.infolist()))
extracted_size = 0
for file in zf.infolist():
extracted_size += file.file_size
percentage = extracted_size * 100/uncompress_size
self.pBar["value"] = percentage
zf.extract(file)
root = Tk()
root.title("Test")
app = Application(root)
root.mainloop()