我正在创建一个带有两个计时器的数字时钟计时器。第一个是30分钟,第二个是30到20秒,具体取决于第一次计时器还剩多长时间。要每30或20秒重置第二个时钟,我创建了一个函数来调用它以将ShotTimer设置回30。但是,它并没有返回任何原因的Shot Timer值。代码在下面
def countdown(matchtime,shottime):
matchstr = str(datetime.timedelta(seconds=matchtime))
shottimestr = str(datetime.timedelta(seconds=shottime))
lbl_text['text'] = matchstr
lbl_textshot['text'] = shottimestr
if shottime == 0:
ShotTime(matchtime, shottime)
print (shottime)
if matchtime > 0:
root.after(1000, countdown, matchtime-1, shottime-1)
print (shottime)
matchstr = str(datetime.timedelta(seconds=matchtime))
shottimestr = str(datetime.timedelta(seconds=shottime))
lbl_text['text'] = matchstr
lbl_textshot['text'] = shottimestr
elif(matchtime == 0):
global NewForm
NewForm = Toplevel()
NewForm.title("Sourcecodester")
width = 500
height = 300
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
x = (screen_width/2) - (width/2)
y = (screen_height/2) - (height/2)
NewForm.geometry("%dx%d+%d+%d" % (width, height, x, y))
NewForm.resizable(0, 0)
lbl_blast = Label(NewForm, text="Blast Off!", font=('arial', 50))
lbl_blast.pack(fill=BOTH, pady=100)
btn_back = Button(NewForm, text="Reset", font=('arial', 16), command=BackBtn)
btn_back.pack(side=TOP)
def ShotTime(matchtime, shottime):
if shottime == 0 and matchtime > 900:
shottime = 30
return matchtime, shottime
elif matchtime <= 900 and shottime == 0:
shottime = 20
return matchtime, shottime
答案 0 :(得分:1)
您在def ShotTime中有一个return语句,但是ShotTime不等于任何值。
编辑: 要详细说明 `def ShotTime(比赛时间,射击时间):
如果射击时间== 0且比赛时间> 900:
射击时间= 30
返回比赛时间,击球时间
Elif比赛时间<= 900和射击时间== 0:
射击时间= 20
返回比赛时间,射击时间
所以您在那里有return语句。
如果拍摄时间== 0:
ShotTime(比赛时间,射击时间)
打印(拍摄时间)
但是在def countdown()中,您没有将其设置为等于任何值。我相信在python中,您必须执行x = ShotTime(matchtime,shottime)之类的操作,这将返回一个数组,然后执行matchtime = x [0]然后shottime = x [1]
edit2:这是@kevin比赛时间,射击时间= ShotTime(比赛时间,射击时间)的一种更好的方法
这与可变范围有关。除非它是全局变量,否则变量将保留在其创建的函数中。仅仅因为它具有相同的名称并不意味着它是相同的变量。
答案 1 :(得分:0)
函数 ShotTime(比赛时间,射击时间)通过值获取参数,而不是通过引用获取参数。设置
shottime = 30
只会影响您返回的值。您没有使用该值。例如
ShotTime(matchtime, shottime)
您可能希望更改为
matchtime, shottime = ShotTime(matchtime, shottime)