當前位置:
首頁 >
怎么用线程刷新 tkinter 进度条_tkinter做一个简易提词板(2)
發(fā)布時間:2025/4/16
40
豆豆
生活随笔
收集整理的這篇文章主要介紹了
怎么用线程刷新 tkinter 进度条_tkinter做一个简易提词板(2)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
書接上文
花果山美男子:tkinter做一個簡易提詞板?zhuanlan.zhihu.com上回說到,文字的動態(tài)效果還可以用after方法和StringVar來實現(xiàn),今天我們就用它們來重新制作提詞板吧。
思路差不多,直接上代碼:
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 #歌詞行數(shù) 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)) #根據(jù)下一句歌詞字數(shù)計算每個字的刷新間隔 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來設置刷新時間的,因此這次我們根據(jù)每兩句歌詞之間的時間間隔,來設置after()里面的第一個參數(shù),也就是時間。
刷新間隔w=兩句歌詞的間隔/下一句歌詞的字數(shù)
這個after函數(shù)需要遞歸調用,以實現(xiàn)界面的刷新。
注意事項:
command = lambda: lottery_start(var1, var2)command = lambda: lottery_end()
這兩句必須加上lambda,否則按鈕就會失效,變成啟動程序自動播放了。而且和之前不同的是,即使關聯(lián)的函數(shù)沒有參數(shù),也要加上括號。
用同樣的方法,我們還可以做很多程序,比如點名提問、滾動抽獎、誰去取外賣等等,我就做了一個“今天誰刷碗”的程序,反正怎么抽都是我刷就對了。
成果就不放了,今天懶得錄屏。
總結
以上是生活随笔為你收集整理的怎么用线程刷新 tkinter 进度条_tkinter做一个简易提词板(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机专业大学排名_计算机专业大学排名公
- 下一篇: 能跳过节假日的闹钟_非人哉:叫九月起床有