機械系エンジニアの備忘録

20代独身社会人。仕事では機械・機構の研究開発を行っているエンジニアが、自分の専門分野ではないpythonを扱って楽しむブログです。

MENU

【Python+TKinter】【初心者】スケールの使い方!スケールで簡易TODOを作ろう

pythonTkinterでスケールを使う方法

■はじめに

これまでTkinterの様々な部品の使い方を紹介してきました。

stjun.hatenablog.com

stjun.hatenablog.com

stjun.hatenablog.com

 今回は、スケールという部品の使い方を紹介します。

 

■コード

忙しい方やpythonのコードを自力で読んで理解できる方向けに、先にコードを載せます。動作環境はAnaconda(python3.7)です。

import tkinter as tk
import tkinter.ttk as ttk

#スケールバーが100%になったら終了と表示し、それ以外では進捗と表示する
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リストを作ろうと思っているので、それに組み込めるよう意識して作ってみました。

f:id:stjun:20190717224722p:plain

 スクロールを動かすと次のように進捗の右の数字が増えていきます。

f:id:stjun:20190717224749p:plain

 100%に達するとグレーの終了文字に変化し、取り消し線が引かれます。

また100%から戻すと上の進捗と表示された画面に戻ります。

f:id:stjun:20190717224803p:plain

■説明

スケールの作成はそこまで難しくありません。

#スケールの作成
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)で次の関数とスケールの動きをリンクさせます。

#スケールバーが100%になったら終了と表示し、それ以外では進捗と表示する
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リストを作っていこうと思っています。その際スケールはタスクの進捗などを管理するときに使えると思ったので紹介しました。