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, bg='black', 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, bg='black', 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()

此代码有效,但它允许您同时设置多个计时器。你可以像以前一样使用全局变量,但时间会更快地减少。您可能需要使用bool值来判断计时器何时运行,以免再次启动。你也可以禁用你的按钮,并在计时器结束时重新启用它。

最新更新