■はじめに
これまでTkinterの様々な部品の使い方を紹介してきました。
stjun.hatenablog.com
stjun.hatenablog.com
stjun.hatenablog.com
今回は、スケールという部品の使い方を紹介します。
■コード
忙しい方やpythonのコードを自力で読んで理解できる方向けに、先にコードを載せます。動作環境はAnaconda(python3.7)です。
import tkinter as tk
import tkinter.ttk as ttk
def text_change(*args):
text_display.set(str(scale_var.get()))
if scale_var.get()==100:
text["font"]='Helvetica',10,"bold","overstrike"
text["fg"]="grey"
text["text"]="終了"
else:
text["font"]='Helvetica',10,"bold"
text["fg"]="black"
text["text"]="進捗"
root=tk.Tk()
root.wm_attributes("-transparentcolor", "white")
scale_var=tk.IntVar()
scale_var.set(0)
scale_var.trace("w",text_change)
scale=ttk.Scale(root,from_=0,to=100,length=100,orient="h",variable=scale_var)
scale.grid(row=0,column=0)
text=tk.Label(text="進捗")
text["font"]='Helvetica',10,"bold"
text.grid(row=0,column=1)
text_1=tk.Label(text="%")
text_1.grid(row=0,column=3)
text_display=tk.StringVar()
text_display.set("0")
label=tk.Label(textvariable=text_display)
label.grid(row=0,column=2)
root.mainloop()
このコードを実行すると以下のようにスケールが出てきます。
今回は今後TODOリストを作ろうと思っているので、それに組み込めるよう意識して作ってみました。
スクロールを動かすと次のように進捗の右の数字が増えていきます。
100%に達するとグレーの終了文字に変化し、取り消し線が引かれます。
また100%から戻すと上の進捗と表示された画面に戻ります。
■説明
スケールの作成はそこまで難しくありません。
scale_var=tk.IntVar()
scale_var.set(0)
scale_var.trace("w",text_change)
scale=ttk.Scale(root,from_=0,to=100,length=100,orient="h",variable=scale_var)
scale.grid(row=0,column=0)
一行目のscale_var=tk.IntVar()で整数が入る変数を作ってあげます。
次にスケールの位置を最初は左側(=0)に設定したいので0をセットします。
次のscale_var.trace("w",text_change)で次の関数とスケールの動きをリンクさせます。
def text_change(*args):
text_display.set(str(scale_var.get()))
if scale_var.get()==100:
text["font"]='Helvetica',10,"bold","overstrike"
text["fg"]="grey"
text["text"]="終了"
else:
text["font"]='Helvetica',10,"bold"
text["fg"]="black"
text["text"]="進捗"
今回、スケールを動かしたときに進捗の右横の数字を増減させたかったのでtext_display.set(str(scale_var.get()))を記載しています。
最後に次のようにスケールを作成します。
scale=ttk.Scale(root,from_=0,to=100,length=100,orient="h",variable=scale_var)
scale.grid(row=0,column=0)
variable=scale_varを忘れないようにしてください。これで終了になります。
■最後に
最近忙しくあまりpythonに触れてないですが、落ち着いたらTODOリストを作っていこうと思っています。その際スケールはタスクの進捗などを管理するときに使えると思ったので紹介しました。