私は、スケールとボタンウィジェットを含むGUIを持っています。ボタンをクリックすると、スケールウィジェットを削除する関数が呼び出されます。スケール値が変更された場合、つまり、ボタンコマンドをアクティブにする前にスケールカーソルを移動させたい場合にのみ、これを実行したいと思います。スケールのデフォルト値は0で、人々はカーソルを動かして0に戻ってきます。私は多くのことを試しましたが、簡単な方法でそれを行う方法を理解できませんでした。スケールウィジェットとボタン付きコマンド、スケール値の変更までコマンドを防止する
ありがとうございます!
は、ここに私のコードの簡易版です。@Sunベアにより示唆されるように
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
方法を使用して新しいバージョンです。それでも動作しません、 "アクション"関数は更新された状態変数を取得していないようです。
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'に変わりますが、" action "関数は状態変数の更新された値を取得しないようです。新しいバージョンのコードを表示するために私の質問を編集しました。どうぞご覧ください。ありがとうございました! –
@PLdeChantal問題は 'scale_activate'がローカル変数だということです。つまり、3つのscale_activate変数があります.1つはメインコードに、もう1つは各関数にあり、それらは接続されていません。 1つの方法は、グローバル変数にすることです。そうでなければ、変数がメインコードから関数に渡され、メインコードと関数に戻されていることを確認する必要があります。これは非常に不便です。 –