如何解决Tkinter scale / slider .get值未在函数中更新
我正在使用Tkinter创建一个倒数计时器GUI,用户可以使用内置的比例尺功能选择倒数的秒数。倒计时本身似乎正在工作,但是即使将滑块向上移动,它也会从最低的('from_')值40开始倒数。我试图将.get()值更改为局部变量,然后将其放入功能,倒数计时将不再起作用,而仅显示滑块设置为的数字(尽管现在它会根据用户输入而改变)。我将在下面粘贴代码,以期消除任何歧义。同样,在没有全局变量且仅在函数外部使用变量的情况下尝试创建该错误(分配前已引用)。任何帮助表示赞赏。下面的代码是本地变量版本:
window = tk.Tk()
window.configure(bg='black')
window.title('TUT Timer')
slider = tk.Scale(window,from_=40,to=60,fg='#39FF14',bg='black',orient=HORIZONTAL)
slider.grid(sticky='nsew')
time_var = slider.get()
def timer():
time_var = slider.get()
if time_var > 0:
time_label.config(text=time_var)
time_var = time_var -1
time_label.after(1000,timer)
elif time_var == 0:
time_label.config(text='0')
def start_button():
timer()
start = tk.Button(text='Start',command=start_button,fg='#39FF14')
start.grid()
time_label = tk.Label(text = '00:00',height = 3,bg= 'black',fg= '#39FF14')
time_label.config(font=('Courier New',20))
time_label.grid(sticky='nsew')
window.mainloop()
在使用全局变量的地方,代码是相同的,但是在计时器函数中使用global time_var
上方或代替time_var = slider.get()
(两者都尝试过,以代替创建工作倒计时但不启动)在比例值上。
总而言之,运行了两个版本的代码,但没有一个完全起作用。一个使用全局变量,但是缩放功能.get不会根据滑块的变化而变化。另一个选项使用相同的变量,但用作局部变量,其结果是仅显示开始编号而不是倒数开始。 如果可以的话,感谢您的帮助!
解决方法
您每次都获得滑块值,并且永远不变。您应该可以使用set()方法来更改滑块以随其移动,但是我认为这不是您想要的。
import tkinter as tk
window = tk.Tk()
window.configure(bg='black')
window.title('TUT Timer')
slider = tk.Scale(window,from_=40,to=60,fg='#39FF14',bg='black',orient=tk.HORIZONTAL)
slider.grid(sticky='nsew')
def timer(time_var):
if time_var > 0:
time_label.config(text=str(time_var))
time_var = time_var - 1
window.after(1000,lambda: timer(time_var))
elif not time_var:
time_label.config(text='0')
def start_button():
time_var = slider.get()
timer(time_var)
start = tk.Button(text='Start',command=start_button,fg='#39FF14')
start.grid()
time_label = tk.Label(text='00:00',height=3,fg='#39FF14')
time_label.config(font=('Courier New',20))
time_label.grid(sticky='nsew')
window.mainloop()
此代码有效,但是它允许您一次设置多个计时器。您可以像以前一样使用全局变量,但是时间会减少得更快。您可能必须使用bool值来告知计时器何时运行,以免再次启动计时器。您还可以禁用按钮,并在计时器结束后重新启用它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。