【问题标题】:Show extracting a .zip file progress Python Tkinter ProgressBar显示提取 .zip 文件的进度 Python Tkinter ProgressBar
【发布时间】:2015-02-06 21:53:43
【问题描述】:

我正在开发一个提取 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()

【问题讨论】:

  • 进度条需要一种方法来了解解压缩的距离。在上面的代码中,你没有办法让它知道。
  • @IronManMark20 你能举个例子说明我应该如何去做吗?

标签: python tkinter zip progress-bar ttk


【解决方案1】:

Zipfile 似乎没有内置读取进度的方法 (accodering to the docs),因此您可以考虑启动另一个线程并让您的脚本一点一点地检查在新目录。这不适用于处理一个大文件,但您需要使用新库来获得该功能。

我收回那句话。查看 this question 获取 zip 文件。

this question 用于 tar 文件。

【讨论】:

  • 我已经看过这些示例,但不幸的是我没有发现它们有帮助:(。但我设法找到了一些更有用的东西!它像我一样游戏提取过程的百分比想要!这是一个链接,但无论如何谢谢:)
【解决方案2】:

不幸的是,在找到没有太大帮助的答案后:(。但我设法找到了一个非常有帮助的示例,并且完全符合我的要求!它得到了提取的百分比:)。这是我找到它的链接: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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    • 2017-11-17
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    相关资源
    最近更新 更多