我有一个GUI,其中包含一个缩放比例和一个按钮窗口小部件。当按钮被点击时,它会调用一个函数来删除缩放部件。我只希望在比例值发生变化时发生这种情况,也就是说,我希望人们在激活按钮命令之前移动比例光标。比例尺的默认值是0,人们可以移动光标,然后回到0.我已经尝试了很多东西,但无法弄清楚如何以简单的方式进行操作。使用命令缩放窗口小部件和按钮,在命令值变化之前阻止命令
预先感谢您!
这里是我的代码的简化版本:
from tkinter import *
def action(widget):
widget.destroy()
window = Tk()
value = DoubleVar()
scale = Scale(window, variable=value, resolution=1)
button = Button(window, command = lambda: action(scale))
scale.pack()
button.pack()
window.mainloop()
下面是一个使用.trace
方法的新版本,由@Sun熊的建议。它仍然不起作用,“动作”函数似乎没有得到更新的状态变量。
from tkinter import *
def scalestate(*arg):
scale_activate = True
print("scale_activate is", scale_activate)
def action(widget):
if scale_activate:
widget.destroy()
window = Tk()
scale_activate = False
print("scale_activate is initially", scale_activate)
value = DoubleVar()
value.trace('w', scalestate)
scale = Scale(window, variable=value, orient=HORIZONTAL)
button = Button(window, command = lambda: action(scale))
scale.pack()
button.pack()
window.mainloop()
你的应用程序工作得很好,这正是我想要的,但我不使用类(但我知道我应该)。 @abccd的解决方案只能部分工作,因为即使在光标移动后我也无法选择原始值;按钮不会启动。我试过对我的应用程序使用'.trace'方法,但它不起作用。当光标移动时,'scale_activate'变量从'False'变为'True',但似乎“动作”函数没有获得状态变量的更新值。我编辑了我的问题以显示我的代码的新版本,您可以查看一下吗?谢谢! –
@PLdeChantal问题是'scale_activate'是一个局部变量。那就是你有3个scale_activate变量,主代码中有1个,每个函数中有1个,它们没有连接。一种方法是使其成为全球变量。否则,您必须确保将变量从主代码传递到函数,并返回到主代码和函数,我认为这样做很不方便。 –