我在一个非常初学者的水平与 Pytn,我有一个简单的项目为自己。
本质上,目标是在微波炉上重新创建“+ 30 秒”按钮的功能,并带有更新显示,其中初始按下既增加了 30 秒并启动了计时器,随后的每次按下都增加了 30 秒倒计时计时器,第二个按钮停止计时器。
这是我一直在使用的基本计时器逻辑。
def countdown(t=30):
while t:
mins, secs = divmod(t, 60)
timer = '{:02d}:{:02d}'.format(mins, secs)
print(timer, end="\r")
time.sleep(1)
t -= 1
print('Done!')
由于以下原因,问题比看起来要复杂一些:
如果您没有为并行事件使用任何库,那么,函数 countdown()将阻止主循环,并且在倒计时运行时您将无法执行任何操作(包括再次单击按钮以添加更多时间)
如果你想使用相同的按钮添加时间,你必须检查屏幕上是否已经有倒计时打印,如果你不检查它,每次点击一个新的时钟会出现。
我建议使用asyncio
lib 如下:
import asyncio
# Create a global variable for the time
secs = 0
#This function adds +30secs
def addTime():
global secs
secs+=30
#This is the func that gather the addTime function and the async clock
async def timerAction():
#This "while" is used to simulate multiple cliks on your on.
# If you implement this as a callback delete the "while"
while True:
j = 0 #Counter if a clock is already running
addTime() #Add time
for task in asyncio.all_tasks(): #This loop checks if there's a countdown already running
if task.get_name()=='countdown':
j+=1
if j == 0: #If no running countdown, j==0, and fires the countdown
taskCountdown = asyncio.create_task(countdown(), name='countdown')
await asyncio.sleep(10) #Wait 10secs between each call to the func (each call simulate a click)
async def countdown():
global secs
while secs>0:
mins, secs = divmod(secs, 60)
timer = '{:02d}:{:02d}'.format(mins, secs)
print(timer, end="\r")
await asyncio.sleep(1)
secs -= 1
print('Done!')
asyncio.run(timerAction())
关于 fisrt 调用:
00:30
10 秒后:
00:50
10 秒后:
01:10
等等
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(67条)