Tkinter使用Progressbar创建和管理进度条的操作代码

 更新时间:2023年07月12日 16:37:39   作者:檬柠wan  
Progressbar是Tkinter库中的一个小部件,用于创建和管理进度条,这篇文章主要介绍了Tkinter使用Progressbar创建和管理进度条,本文结合实例代码给大家介绍的非常详细,需要的朋友可以参考下

前言

Progressbar是Tkinter库中的一个小部件,用于创建和管理进度条。它可以在图形用户界面中显示任务的进度,并提供了多种样式和配置选项。

使用Progressbar,你可以按照固定或不确定的进度展示任务的进行状态。它可以显示任务完成的百分比,或者在不确定的情况下,显示一个动画效果表示任务正在进行。

以下是一些Progressbar的重要属性和方法:

  • length:指定进度条的长度。
  • mode:指定进度条的模式,可以是"determinate"(确定模式)或"indeterminate"(不确定模式)。
  • maximum:设置进度条的最大值,默认为100。
  • value:设置进度条的当前值。
  • start():启动进度条的动画效果,仅在不确定模式下有效。
  • stop():停止进度条的动画效果,仅在不确定模式下有效。

通过使用这些属性和方法,你可以创建一个自定义的进度条并根据需要进行更新和控制。

一、indeterminate 模式

在这个模式下指针左右移动,主要目的是要让用户知道程序还在运行

import tkinter as tk
from tkinter.ttk import Progressbar
class Simulate_Waiting_State:
    def __init__(self):
        self.root = tk.Tk()
        self.root.title('进度条下载演示')
        self.root.geometry("300x150+1100+150")
        self.interface()
    def interface(self):
        # 创建进度条
        self.progress_bar = Progressbar(self.root, length=200, mode="indeterminate")
        # 创建按钮
        self.start_button = tk.Button(self.root, text="开始", command=self.start_progress)
        self.stop_button = tk.Button(self.root, text="停止", command=self.stop_progress)
        # 将进度条和按钮放置在窗口中
        self.progress_bar.grid(row=0, column=1, pady=20, padx=50, columnspan=100)
        self.start_button.grid(row=1, column=1, padx=75)
        self.stop_button.grid(row=1, column=3)
    def start_progress(self):
        self.progress_bar.start()
    def stop_progress(self):
        self.progress_bar.stop()
if __name__ == '__main__':
    run = Simulate_Waiting_State()
    run.root.mainloop()
import tkinter as tk
from tkinter.ttk import Progressbar
class Simulate_Waiting_State:
    def __init__(self):
        self.root = tk.Tk()
        self.root.title('进度条下载演示')
        self.root.geometry("300x150+1100+150")
        self.interface()
    def interface(self):
        # 创建进度条
        self.progress_bar = Progressbar(self.root, length=200, mode="indeterminate")
        # 创建按钮
        self.start_button = tk.Button(self.root, text="开始", command=self.start_progress)
        self.stop_button = tk.Button(self.root, text="停止", command=self.stop_progress)
        # 将进度条和按钮放置在窗口中
        self.progress_bar.grid(row=0, column=1, pady=20, padx=50, columnspan=100)
        self.start_button.grid(row=1, column=1, padx=75)
        self.stop_button.grid(row=1, column=3)
    def start_progress(self):
        self.progress_bar.start()
    def stop_progress(self):
        self.progress_bar.stop()
if __name__ == '__main__':
    run = Simulate_Waiting_State()
    run.root.mainloop()

请添加图片描述

二、determinate模式

1、模拟下载进度

import tkinter as tk
from tkinter.ttk import Progressbar
import threading
import time
class Download_Files:
    def __init__(self):
        self.root = tk.Tk()
        self.root.title('进度条下载演示')
        self.root.geometry("300x150+1100+150")
        self.interface()
    def interface(self):
        # 创建进度条
        self.progress_bar = Progressbar(self.root, length=200, mode="determinate")
        # 创建按钮
        self.start_button = tk.Button(self.root, text="开始下载", command=self.download)
        # 将进度条和按钮放置在窗口中
        self.progress_bar.grid(row=0, pady=20, padx=50)
        self.start_button.grid(row=1, padx=50)
        # 进度值最大值
        self.progress_bar['maximum'] = 100
    def download(self):
        """进度条模拟显示下载进度"""
        # 进度值初始值
        initial_value = 0
        while initial_value < 100:
            initial_value += 1
            # 更新进度条的值
            self.progress_bar['value'] = initial_value
            self.root.update()
            # 模拟等待时间时间
            time.sleep(0.1)
    def thread_management(self):
        """启用子线程下载文件"""
        T1 = threading.Thread(target=self.download, daemon=True)
        T1.start()
if __name__ == '__main__':
    run = Download_Files()
    run.root.mainloop()

2、真实下载进度

import tkinter as tk
from tkinter.ttk import Progressbar
from tkinter import messagebox
import threading
import requests
class Download_Files:
    def __init__(self):
        self.root = tk.Tk()
        self.root.title('进度条下载演示')
        self.root.geometry("300x150+850+350")
        self.interface()
    def interface(self):
        # 创建进度条
        self.progress_bar = Progressbar(self.root, length=200, mode="determinate")
        # 创建按钮
        self.start_button = tk.Button(self.root, text="开始下载", command=self.thread_group)
        # 将进度条和按钮放置在窗口中
        self.progress_bar.grid(row=0, pady=20, padx=50)
        self.start_button.grid(row=1, padx=50)
    def download(self):
        # 禁用按钮
        self.start_button.config(state=tk.DISABLED)
        # 下载地址
        url = 'http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2'
        file_data = requests.get(url, stream=True)
        # 获取文件大小,单位字节(B)
        if "content-length" in file_data.headers:
            maxbyte = int(file_data.headers["content-length"])
        # 截取文件名称
        filename = url.split("/")[-1]
        with open(filename, "wb") as f:
            downloaded_bytes = 0
            for chunk in file_data.iter_content(chunk_size=1024):
                if chunk:
                    f.write(chunk)
                    downloaded_bytes += len(chunk)
                    # 更新进度条的值
                    # 将已下载的字节数除以文件总大小(maxbyte),然后乘以100,得到已下载的数据量相对于文件总大小的百分比
                    self.progress_bar['value'] = downloaded_bytes / maxbyte * 100
                    self.root.update()
        # 弹窗提示下载完成
        messagebox.showinfo("下载提示", "文件下载完成!")
        # 恢复按钮的可点击状态
        self.start_button.config(state=tk.NORMAL)
        # 下载完成后重置进度条的值
        self.progress_bar['value'] = 0
    def thread_group(self):
        """启用子线程下载"""
        T1 = threading.Thread(name='download', target=self.download, daemon=True)
        T1.start()
if __name__ == '__main__':
    run = Download_Files()
    run.root.mainloop()

请添加图片描述

到此这篇关于Tkinter使用Progressbar创建和管理进度条的文章就介绍到这了,更多相关Tkinter Progressbar进度条内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 跟老齐学Python之赋值,简单也不简单

    跟老齐学Python之赋值,简单也不简单

    在《初识永远强大的函数》一文中,有一节专门讨论“取名字的学问”,就是有关变量名称的问题,本温故而知新的原则,这里要复习一下
    2014-09-09
  • Pycharm 2019 破解激活方法图文详解

    Pycharm 2019 破解激活方法图文详解

    这篇文章主要介绍了Pycharm 2019 破解激活方法图文详解,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • Python中顺序表的实现简单代码分享

    Python中顺序表的实现简单代码分享

    这篇文章主要介绍了Python中顺序表的实现简单代码分享,展示了代码运行结果,然后分享了相关实例代码,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Python数据分析之Python和Selenium爬取BOSS直聘岗位

    Python数据分析之Python和Selenium爬取BOSS直聘岗位

    今天教各位小伙伴怎么用Python和Selenium爬取BOSS直聘岗位,文中有非常详细的代码示例,对正在学习python爬虫和数据分析的小伙伴有很好地帮助,需要的朋友可以参考下
    2021-05-05
  • 完美解决Django2.0中models下的ForeignKey()问题

    完美解决Django2.0中models下的ForeignKey()问题

    这篇文章主要介绍了完美解决Django2.0中models下的ForeignKey()问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • 利用python开发app实战的方法

    利用python开发app实战的方法

    这篇文章主要介绍了利用python开发app实战的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • 一篇文章从零开始创建conda环境、常用命令的使用及pycharm配置项目环境

    一篇文章从零开始创建conda环境、常用命令的使用及pycharm配置项目环境

    在Conda中创建新环境是一个非常有用的做法,尤其是当你需要为不同的项目安装不同版本的软件包时,这篇文章主要给大家介绍了关于从零开始创建conda环境、常用命令的使用及pycharm配置项目环境的相关资料,需要的朋友可以参考下
    2024-07-07
  • Python报错:TypeError: ‘xxx‘ object is not subscriptable解决办法

    Python报错:TypeError: ‘xxx‘ object is not subscriptable解决

    这篇文章主要给大家介绍了关于Python报错:TypeError: ‘xxx‘ object is not subscriptable的解决办法,TypeError是Python中的一种错误,表示操作或函数应用于不合适类型的对象时发生,文中将解决办法介绍的非常详细,需要的朋友可以参考下
    2024-08-08
  • python验证码识别教程之利用滴水算法分割图片

    python验证码识别教程之利用滴水算法分割图片

    这篇文章主要给大家介绍了关于python验证码识别教程之利用滴水算法分割图片的相关资料,文章中通过示例代码介绍的非常详细,对大家的学习或者具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-06-06
  • python 判断参数为Nonetype类型或空的实例

    python 判断参数为Nonetype类型或空的实例

    今天小编就为大家分享一篇python 判断参数为Nonetype类型或空的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10

最新评论