我有一個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個,它們沒有連接。一種方法是使其成爲全球變量。否則,您必須確保將變量從主代碼傳遞到函數,並返回到主代碼和函數,我認爲這樣做很不方便。 –