当前位置:   article > 正文

【tkinter 专栏】进度条组件_tkinter 进度条 主窗口

tkinter 进度条 主窗口

前言

本专栏将参考《Python GUI 设计 tkinter 从入门到实践》书籍(吉林大学出版社 ISBN: 9787569275001)所整理的 Python GUI 设计内容,结合笔者自身在项目实践过程中对于 GUI 开发的理解,主要围绕 tkinter 库进行 GUI 设计的详细介绍。

《Python GUI 设计tkinter从入门到实践(全彩版)》内容简介

《Python GUI设计tkinter从入门到实践》这本书以开发Python窗口程序常用的tkinter模块为主线,全面介绍了使用 tkinter 设计 Python GUI 程序的各方面技术。全书共分为18章,包括搭建开发环境、tkinter与GUI、tkinter窗口设计、tkinter布局管理、文本类组件、按钮类组件、选择列表与滚动条、容器组件、消息组件与对话框、菜单组件、进度条组件、Canvas绘图、鼠标键盘事件处理、数据库操作、文件操作、程序的打包发布、掷骰子游戏、学生成绩管理系统等内容。从用户学习与应用的角度出发,通过将知识点与实例结合的方式让读者学用结合,轻松理解;通过大量示意图和有趣应用,打造零压力学习的阅读氛围;利用两个实战项目将tkinter开发知识应用于实际项目中,以使读者亲身体验项目开发的全过程,力求为读者打造一本结合了“基础入门+应用开发+实战项目”一体化的Python tkinter开发图书。

感兴趣的读者可找来该书详细阅读。

本章内容导图

进度条组件
Progressbar 进度条组件
左右循环滚动的进度条

进度条可用于显示当前任务的执行进度。

1. Progressbar 进度条组件

参数含义
orient设置进度条水平显示或垂直显示,可选的值有 horizontal、vertical
length设置进度条的长度
mode进度条加载动画的模式,可选的值由 determinate(指针从起点移动到终点后,在此从起点开始移动,默认值) 和 indeterminate (指针在起点与终点间来回滚动)
maximum指定进度条的最大值,默认值为 100
value进度条的当前值,mode=determinate 时,value 表示已完成的工作量;若 mode=indeterminate,当 value=maximum 时,指针在进度条最右侧
variable为进度条的值绑定一个变量,当变量的值发生变化时,进度条值也会发生改变

模拟小猫进食游戏:

# _*_coding:UTF-8 _*_
# 开发团队:明日科技
# 开发人员:pc
# 开发时间:2020/4/8  20:33
# 文件名称:demo1.PY
# 开发工具:PyCharm
# progressbar的相关方法
# 吃了几分饱

from tkinter import *
from tkinter.ttk import *

val = 0
def add1(c):
    global val
    val += c
    # 判断进度条的当前值是否到达最大值
    if val > pro["max"]:
        label.config(text="我吃饱了")
    else:
        vari.set(val)
win = Tk()
win.geometry("220x190")
Label(win, text="投食:").grid(row=0, column=0, columnspan=1)
# 选择投食大鱼或者小鱼,大鱼增加6点,小鱼增加2点
Button(win, text="小鱼", command=lambda: add1(2)).grid(row=0, column=1,  pady=10)
Button(win, text="大鱼", command=lambda: add1(6)).grid(row=0, column=2, pady=10)
img = PhotoImage(file="cat.png")          #  小猫
label = Label(win,image=img,compound=TOP,foreground="red")
label.grid(row=1, column=0, columnspan=4)
vari = IntVar()  #绑定到进度条的当前值
vari.set(0)
# 进度条显示小猫饱腹程度
pro = Progressbar(win, mode="determinate", variable=vari, max=50, length=200)
pro.grid(row=2, column=0, columnspan=4, pady=5)
win.mainloop()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

在这里插入图片描述

在这里插入图片描述

2. Progressbar 组件的相关方法

Progressbar 组件主要提供了三个方法,这三个方法可以控制进度条加载动画的开始、停止以及设置进度条的步进值:

  • start(iterval=None):开始自动递增模式,每隔 interval 时间,就调用一次 step(amount=None) 方法,默认值 50ms。
  • step(amount=None):设置进度条递增的步进值,默认值为 1.0。
  • stop():停止 start(interval) 的运行。

制作显示游戏加载进度的进度条

import tkinter
import tkinter.ttk

def rego():
    pro.stop()  # 停止原进度条动画
    pro.step(10) # 设置步进值
    pro.start() # 开始加载动画

root = tkinter.Tk()

label = tkinter.Label(root, text="进度条", foreground="red", font=("华文新魏", 18), compound=tkinter.BOTTOM)
label.grid(row=1, column=0, columnspan=3)

pro = tkinter.ttk.Progressbar(root, mode="determinate", value=0, max=100, length=100)
pro.grid(row=2, column=0, columnspan=3, pady=10)

tkinter.Button(root, text="进入游戏", command=pro.start, width=7).grid(row=4, column=0, padx=5)
tkinter.Button(root, text="游戏加速", command=rego, width=7).grid(row=4, column=1, padx=5)
tkinter.Button(root, text="停止加载", command=pro.stop, width=7).grid(row=4, column=2, padx=5)

root.mainloop()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

在这里插入图片描述

3. 左右循环滚动的进度条

除了上面介绍的进度条动画外,还有一种进度条动画,该动画过程中指针并不显示当前进度,而是在进度条中左右循环滚动,这种进度条动画适用于不知道整个进程需要花费多长时间的状况。

添加此类进度条动画只需要将 Progressbar 组件中的 mode 参数修改为 indeterminate 即可。

通过循环滚动的进度条模拟进入游戏时的加载动画

import tkinter
import tkinter.ttk

root = tkinter.Tk()

label = tkinter.Label(root, text="进度条", foreground="red", font=("华文新魏", 18), compound=tkinter.BOTTOM)
label.grid(row=1, column=0, columnspan=3)

pro = tkinter.ttk.Progressbar(root, mode="indeterminate", value=0, max=100, length=100)
pro.grid(row=2, column=0, columnspan=3, pady=10)

tkinter.Button(root, text="进入游戏", command=pro.start(40), width=7).grid(row=4, column=0, padx=5)

root.mainloop()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

在这里插入图片描述


两个常见的命令行形式进度条:

import sys
import time

for i in range(1, 101):
    print("\r", end="")
    print("Download progress: {}%: ".format(i), "▋" * (i // 2), end="")
    sys.stdout.flush()
    time.sleep(0.5)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述

import time

scale = 50

start = time.perf_counter()

for i in range(scale + 1):
    a = "*" * i
    b = "." * (scale - i)
    c = (i / scale) * 100
    dur = time.perf_counter() - start
    print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur),end = "")
    time.sleep(0.1)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/761179
推荐阅读
相关标签
  

闽ICP备14008679号