赞
踩
本专栏将参考《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开发图书。
感兴趣的读者可找来该书详细阅读。
进度条可用于显示当前任务的执行进度。
参数 | 含义 |
---|---|
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()
Progressbar 组件主要提供了三个方法,这三个方法可以控制进度条加载动画的开始、停止以及设置进度条的步进值:
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()
除了上面介绍的进度条动画外,还有一种进度条动画,该动画过程中指针并不显示当前进度,而是在进度条中左右循环滚动,这种进度条动画适用于不知道整个进程需要花费多长时间的状况。
添加此类进度条动画只需要将 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()
两个常见的命令行形式进度条:
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)
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)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。