2017-05-25 1 views
2

私はスケールを移動する値に従って値を変更するプログレスバーを持っています。今度は、スケールをどの値に移動するかによって、進行状況バーの色をリアルタイムで変更したいと考えています。ここで私はこれを行うために作成されている方法は次のとおりです。スケールを使ってPythonのプログレスバーの色を更新しますか?

def volumelevel(): 
    s = ttk.Style() 
    s.theme_use("classic") 
    if scalevar.get() <= 25: 
     s.configure("green.Horizontal.TProgressbar", background='green') 
     scale.configure(variable=scalevar, command=lambda x: progress.configure(value=scalevar.get())) 
     progress.configure(style="green.Horizontal.TProgressbar") 
    elif scalevar.get() <= 75: 
     s.configure("yellow.Horizontal.TProgressbar", background='yellow') 
     scale.configure(variable=scalevar, command=lambda x: progress.configure(value=scalevar.get())) 
     progress.configure(style="yellow.Horizontal.TProgressbar") 
    elif scalevar.get() <= 90: 
     s.configure("orange.Horizontal.TProgressbar", background='orange') 
     scale.configure(variable=scalevar, command=lambda x: progress.configure(value=scalevar.get())) 
     progress.configure(style="orange.Horizontal.TProgressbar") 
    elif scalevar.get() <= 100: 
     s.configure("red.Horizontal.TProgressbar", background='red') 
     scale.configure(variable=scalevar, command=lambda x: progress.configure(value=scalevar.get())) 
     progress.configure(style="red.Horizontal.TProgressbar") 

私はそれをテストするために、ボタンの内側にそれを呼んだので、私はスケールを調整し、ボタンをクリックすると、プログレスバーの色、私はこの方法では、作業を行います知っています変更。

私はスケールオブジェクトでこのメソッドを呼び出していますが、スケールスライダーを動かすと、スケールが設定されている値に関係なく、プログレスバーは緑のままです(メソッドで指定されたとおり)。プログレスバーの色をスケールでリアルタイムに変更するにはどうすればよいですか?

UPDATE:私はtkinterエントリを作成してリアルタイムで値を表示し、その値に応じてエントリのフォアグラウンドを変更しました。何らかの理由で動作しますが、バーではありません。

答えて

4

さて、私はこの方法で遊んで始めましたが、問題はそこに冗長性がたくさんあることです(まだ学習中です)。私はギャンブルを行い、コードの小さな部分を一度に取り除いて、メソッドがどのように動作し、主要な問題が自分のスケール構成にあったかを確認し始めました。不要なコードを除去した後、次のような方法が見えます:

def volumelevel(): 
    if scalevar.get() <= 25: 
     s.configure("Horizontal.TProgressbar", background='green') 
     progress.configure(style="Horizontal.TProgressbar", value=scalevar.get()) 
    elif scalevar.get() <= 75: 
     s.configure("Horizontal.TProgressbar", background='yellow') 
     progress.configure(style="Horizontal.TProgressbar", value=scalevar.get()) 
    elif scalevar.get() <= 90: 
     s.configure("Horizontal.TProgressbar", background='orange') 
     progress.configure(style="Horizontal.TProgressbar", value=scalevar.get()) 
    elif scalevar.get() <= 100: 
     s.configure("Horizontal.TProgressbar", background='red') 
     progress.configure(style="Horizontal.TProgressbar", value=scalevar.get()) 

私はStyle()宣言し、私の​​コードの根元部分でテーマを(前の例から私が見つけた)持っていたので、私はそれを取り出しました。

これはメソッドに影響を与えないので、私は自分のスタイルの名前からカラー名を取りました。

属性がスケールオブジェクト自体で呼び出されているため、スケールオブジェクト内でコマンドを使用して、プログレスバーの値を設定する代わりに作成したメソッドを呼び出しました。

これで、スケールの値に基づいてプログレスバーがリアルタイムで色が変わります。

関連する問題