书接上文

花果山美男子:tkinter做一个简易提词板​zhuanlan.zhihu.com

上回说到,文字的动态效果还可以用after方法和StringVar来实现,今天我们就用它们来重新制作提词板吧。

思路差不多,直接上代码:

import re
from tkinter import *top = tkinter.Tk()
top.title('提词板')
top.geometry(top,800x80)
f = open('C:/Users/lin042/Desktop/歌词.txt','rb').readlines()
var1 = StringVar(value='')
var2 = StringVar(value='')
mes0 = tkinter.Label(top,textvariable=var1,font=('黑体', 20),fg='Goldenrod')
mes0.pack()
mes1 = tkinter.Label(top,textvariable=var2,font=('黑体', 20),fg='Goldenrod')
mes1.pack()j=0  #歌词行数
k=11  #每个字在当句的位置下标
i=""  #下一次刷新的内容
flag=True  #是否暂停
is_run = False  #是否正在运行
ti,t0=0,1
tt=0def show(var1, var2):global j,k,i,flag,ti,t0,ttlrc = f[j].decode().strip()i+=lrc[k]#两行提词板交替更新if j%2==0:var1.set(i)else:var2.set(i)k+=1if k==len(lrc):j+=1     i=""k=11if j==len(f):returnif j< len(f):   #这里是j而不是j+1,因为提词板需要提前一句        t0=ti  #记录上一次的起始时间点lrc2 = f[j].decode().strip()m = 10*int(lrc2[1]) + int(lrc2[2])s = 10*int(lrc2[4]) + int(lrc2[5])ms = 100*int(lrc2[7]) + 10*int(lrc2[8]) + int(lrc2[9])ti = m*60 + s + ms/1000  #本句歌词的起始时间点#如果不是同一句,则计算两句的间隔时间(毫秒)if t0!=ti:tt=int(1000*(ti-t0))  #根据下一句歌词字数计算每个字的刷新间隔    w=int(tt/(len(lrc)-11))if  flag:top.after(w, showImg, var1, var2) else:flag=Truereturn   #开始
def lottery_start(var1, var2):global is_runif is_run:  #判断是否正在运行returnis_run = Trueshow(var1, var2)
#暂停
def lottery_end():global flag, is_runif is_run:flag = Falseis_run = Falsesubmit_button = tkinter.Button(top, text ="想见你", font=('黑体', 10),fg='red',width=10,height=2,command = lambda: lottery_start(var1, var2))
submit_button.place(x=10, y=5)
submit_button = tkinter.Button(top, text ="不见了", font=('黑体', 10),fg='red',width=10,height=2,command = lambda: lottery_end())
submit_button.place(x=10, y=40)top.mainloop()

既然是提词板,唯一需要注意的就是如何让歌词按照时间来更新。由于是用after来设置刷新时间的,因此这次我们根据每两句歌词之间的时间间隔,来设置after()里面的第一个参数,也就是时间。

刷新间隔w=两句歌词的间隔/下一句歌词的字数

这个after函数需要递归调用,以实现界面的刷新。

注意事项:

command = lambda: lottery_start(var1, var2)
command = lambda: lottery_end()

这两句必须加上lambda,否则按钮就会失效,变成启动程序自动播放了。而且和之前不同的是,即使关联的函数没有参数,也要加上括号。

用同样的方法,我们还可以做很多程序,比如点名提问、滚动抽奖、谁去取外卖等等,我就做了一个“今天谁刷碗”的程序,反正怎么抽都是我刷就对了。

成果就不放了,今天懒得录屏。

怎么用线程刷新 tkinter 进度条_tkinter做一个简易提词板(2)相关推荐

  1. tkinter label_tkinter做一个简易提词板

    我们看综艺的时候,经常能看到现场的提词板.今天我们就用tkinter做一个简单的提词板,用到了tkinter的label来动态显示文字. 我们就以最近火爆的<想见你>这首歌为例,按照歌词时 ...

  2. python 函数进度条怎么_python输出结果刷新及进度条的实现操作

    print函数 python输出主要使用print函数,print函数介绍: print(*objects, sep=" ", end=" ", file=sy ...

  3. delphi 多个线程 多个进度条_多线程有哪些优点?- Python每日3题(多线程专题)

    这里是Python7编程挑战-多线程专题! 每天学习3个问题,包括初级,中级,高级问题各1个. 今天是第2天!一起来呀,就7天! 每日3题是麦叔的面试系列专题之一,每天包括初级,中级,高级难度题目各一 ...

  4. QT 定时关机、共享内存、启动浏览器、浏览器前进后退刷新、进度条、设置浏览器标题、QML入门

    定时关机 .h #include <QTimer> #include <stdlib.h> #include <QByteArray>//构造函数 //system ...

  5. python tkinter进度条_在python tkinter中Canvas实现进度条显示的方法

    如下所示: from tkinter import * import time #更新进度条函数 def change_schedule(now_schedule,all_schedule): can ...

  6. 艺赛旗(RPA)python 的 tkinter 进度条的实现

    艺赛旗 RPA8.0全新首发免费下载 点击下载 http://www.i-search.com.cn/index.html?from=line1 请看程序运行过程: 进度条满了之后,能实现自动清理,这 ...

  7. linux进度条脚本,Linux下简易进度条的实现代码

    在生活中,进度条是很常见的,那么,进度条是如何实现的呢? 首先,进度条的动态是利用人眼视觉暂留效果的.实际上是如下过程: 先输出:[=     ]表示进度是1%,刷新之后 再输出:[==    ].. ...

  8. elementui 进度条怎么做_小E,Excel中这样的进度条是怎么做出来的?

    我的目标:让中国的大学生走出校门的那一刻就已经具备这些office技能,让职场人士能高效使用office为其服务.支持我,也为自己加油! 前面我们分享过如何做进度条: <Excel进度条启示:专 ...

  9. tkinter中text插入_tkinter做一个体重档案

    很多健身软件都有体重档案的功能,用来记录自己过去的体重变化.今天我们也来做一个简单的小程序实现这个功能. 首先我上网找了一个tkinter做的万年历程序,然后在它的基础上,增加了绘制体重折线图.记录当 ...

最新文章

  1. keras 的 example 文件 variational_autoencoder.py 解析
  2. AIX上如何启动和停止系统服务
  3. php error 2,一起搞懂PHP的错误和异常(二)
  4. parcelable 缺点_成都金牛区茶道炭优缺点-兴木华木炭
  5. 新建第一个windows服务(Windows Service)
  6. 服务器的防火墙禁止了对指定通讯端口的访问,使用iptables限制访问网站指定端口...
  7. 《计算复杂性:现代方法》——第0章 记 号 约 定 0.1 对象的字符串表示
  8. 静态锁 java_为什么锁定对象必须是静态的?
  9. 【独家】阿里云罗庆超:对象存储 OSS 海量数据管理和应用最佳实践
  10. html帮助文档看不了,Service Log按照文档设置之后,在web页面看不到,帮助文档的图片有点问题(看不到了),能不能处理一下...
  11. VScode+Latex:代码和pdf互相跳转
  12. 电脑桌面计算机分区不显示,win10硬盘分区不见了怎么办_win10电脑硬盘分区不见了如何恢复...
  13. android默认壁纸的历史,Android 默认壁纸 简单分析
  14. 内存映射文件的优势劣势体会
  15. 苹果手机换了屏显示无服务器,苹果手机出现“无法验证此 iPhone 屏幕是正品”怎么办...
  16. html 下划线 鼠标手,(腾讯设计规范.ppt
  17. kvm 4.磁盘格式简介及使用磁盘格式转换的方式拍摄快照
  18. springboot+ssm+jsp大学生社团活动报名管理系统java
  19. vue+vuecli+webpack中使用mockjs模拟后端数据
  20. jQuery中的end()的定义与用法

热门文章

  1. PostgreSQL中Timestamp转成世纪秒(Unix时间戳)
  2. NTP-Windows 2008和win7下开启网络对时方法
  3. [Swift]LeetCode522. 最长特殊序列 II | Longest Uncommon Subsequence II
  4. ssh密钥分发之二:使用sshpass配合ssh-kopy-id编写脚本批量分发密钥:
  5. python模块和包(模块、包、发布模块)
  6. 20162328蔡文琛 第十周 周五 课上测试
  7. cocos2x (c++/lua) spine 文件的预加载
  8. hdu 3629 Convex
  9. SharePoint:扩展DVWP - 第3部分:把DVWP的功能链接放在同一行中
  10. 关于移除节点的IE和Firefox的兼容问题