日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2025/4/16 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 怎么用线程刷新 tkinter 进度条_tkinter做一个简易提词板(2) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

書接上文

花果山美男子:tkinter做一個(gè)簡(jiǎn)易提詞板?zhuanlan.zhihu.com

上回說(shuō)到,文字的動(dòng)態(tài)效果還可以用after方法和StringVar來(lái)實(shí)現(xiàn),今天我們就用它們來(lái)重新制作提詞板吧。

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

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 #每個(gè)字在當(dāng)句的位置下標(biāo) i="" #下一次刷新的內(nèi)容 flag=True #是否暫停 is_run = False #是否正在運(yùn)行 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,因?yàn)樘嵩~板需要提前一句 t0=ti #記錄上一次的起始時(shí)間點(diǎn)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 #本句歌詞的起始時(shí)間點(diǎn)#如果不是同一句,則計(jì)算兩句的間隔時(shí)間(毫秒)if t0!=ti:tt=int(1000*(ti-t0)) #根據(jù)下一句歌詞字?jǐn)?shù)計(jì)算每個(gè)字的刷新間隔 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: #判斷是否正在運(yùn)行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()

既然是提詞板,唯一需要注意的就是如何讓歌詞按照時(shí)間來(lái)更新。由于是用after來(lái)設(shè)置刷新時(shí)間的,因此這次我們根據(jù)每?jī)删涓柙~之間的時(shí)間間隔,來(lái)設(shè)置after()里面的第一個(gè)參數(shù),也就是時(shí)間。

刷新間隔w=兩句歌詞的間隔/下一句歌詞的字?jǐn)?shù)

這個(gè)after函數(shù)需要遞歸調(diào)用,以實(shí)現(xiàn)界面的刷新。

注意事項(xiàng):

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

這兩句必須加上lambda,否則按鈕就會(huì)失效,變成啟動(dòng)程序自動(dòng)播放了。而且和之前不同的是,即使關(guān)聯(lián)的函數(shù)沒有參數(shù),也要加上括號(hào)。

用同樣的方法,我們還可以做很多程序,比如點(diǎn)名提問、滾動(dòng)抽獎(jiǎng)、誰(shuí)去取外賣等等,我就做了一個(gè)“今天誰(shuí)刷碗”的程序,反正怎么抽都是我刷就對(duì)了。

成果就不放了,今天懶得錄屏。

總結(jié)

以上是生活随笔為你收集整理的怎么用线程刷新 tkinter 进度条_tkinter做一个简易提词板(2)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。