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

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

MENU

【Part7】python3-tkinterの使い方 - チェックボタンを使おう(3/3)

【Part7】完成させよう

1.前回のおさらい

前回は必要な部品(ラベル,チャックボタン×5,ボタン)を作り,チェックボタンのチェックの有無を判別し,チェックの有無で処理を変える方法を記載しました。

for i in len(Check_list_val): 

      if Check_list_val[i].get()==True:

         処理A

     else:

        処理B

ここまできたら後ちょっとです。ボタンを押したらチェックの有無を確認し、チェックの有無で処理を変えるように少し書き換えてあげましょう。

2.完成コード

前々回,前回にも載っていますが,改めて載せておきます。

import tkinter as tk

#ウインド画面の設定
win=tk.Tk()
win.title("python3_tkinter_part5")
win.geometry("500x300")

#ラベル(変数名:label)の作成
label=tk.Label(text="終わったタスクにチェックを入れて評価ボタンを押してください")
label.place(x=30,y=5)

#チェックボタン(変数名:Chek_buttn)の作成
Check_list=[]
Check_list_val=[]
Check_buttn_number=5
text_anser=[]
for i in range(Check_buttn_number):
    Check_val=tk.BooleanVar()
    Check_val.set(False)
    Check_buttn=tk.Checkbutton(text="タスク"+str(len(Check_list)+1),variable=Check_val)
    Check_buttn.place(x=30,y=i*30+30)
    Check_list.append(Check_buttn)
    Check_list_val.append(Check_val)

#ボタンを押したらチェックがついてるタスクの数を確認し、チェックの数を表示
    def Click_buttn():
        text_anser=[]
        for i in range(len(Check_list)):
            if Check_list_val[i].get()==True:
                text=tk.Label(text="タスクは終了しました")
                text.place(x=100,y=i*30+32)
                text_anser.append(1)
            else:
                text=tk.Label(text="タスクは未解決です",foreground="red")
                text.place(x=100,y=i*30+32)
        
        if len(text_anser)==Check_buttn_number:
            text=tk.Label(text="お疲れ様でした,今日のタスクは終了です。")
            text.place(x=100,y=250)
        else:
            text=tk.Label(text="終了したタスクは "+str(len(text_anser))+"/"+str(len(Check_list))+"個です")
            text.place(x=100,y=250)
                
#ボタン(変数名:Button)の作成
Button=tk.Button(win,width=5,background="#ffffff",text="評価",command=Click_buttn)
Button.place(x=30,y=250)   
    


#ウインドの表示
win.mainloop()

 

f:id:stjun:20190518231837j:plain

 

f:id:stjun:20190518232429j:plain

 

<説明> 

前回,チェックボタンのチェックの有無はget()で取得し,if文でチェックがついてたら(=True)処理Aを,チェックがついてなかったら(=False)処理Bを行うコードをやりましたね。

for i in len(Check_list_val): 

      if Check_list_val[i].get()==True:

         処理A

     else:

        処理B

これを関数としてまとめて,part4でやったようにボタンを押すと関数を実行するよう設定してあげれば良いだけです。

コード例は以下になります。

#ボタンを押したらチェックがついてるタスクの数を確認し、チェックの数を表示
    def Click_buttn():
        text_anser=[]
        for i in range(len(Check_list)):
            #チェックが入ってたら(=True),タスクの横に黒字で「タスクは終了しました」と記載する
            if Check_list_val[i].get()==True:
                text=tk.Label(text="タスクは終了しました")
                text.place(x=100,y=i*30+32)
                text_anser.append(1)
                
            #チェックが入ってなかったら(=False),タスクの横に赤字で「タスクは未解決です」と記載する
            else:
                text=tk.Label(text="タスクは未解決です",foreground="red")
                text.place(x=100,y=i*30+32)
                
        #作ったタスクの数(=5個)と終了したタスクの数が同じだったらボタンの横に「お疲れ様でした」と表示
        if len(text_anser)==Check_buttn_number:
            text=tk.Label(text="お疲れ様でした,今日のタスクは終了です。")
            text.place(x=100,y=250)
        #作ったタスクの数(=5個)と終了したタスクの数が違ったらボタンの横に終了したタスクの数を表示
        else:
            text=tk.Label(text="終了したタスクは "+str(len(text_anser))+"/"+str(len(Check_list))+"個です")
            text.place(x=100,y=250)
                
#ボタン(変数名:Button)の作成
Button=tk.Button(win,width=5,background="#ffffff",text="評価",command=Click_buttn)
Button.place(x=30,y=250)   

ここまで読んでくれた方にはもう説明はいらないと思います。

終了したタスクの数は,if Check_list_val[i].get()==True:だったら空のリストtext_anserにappendで1を入れ,これをタスクの数(=5回)繰り返します。最終的にlen(text_anser)で要素の数を取得し、終了したタスクの数を数えています。

また復習ですがtk.Buttonの中にcommand=Click_buttnを記載することで、ボタンを押すとClick_buttn関数が実行するようにしてます。Click_buttn関数の中は、前回やったようにチェックがついてたら(=True),横に黒字で「タスクは終了しました」というテキストを出現させ,チェックがついてなかったら(=False),横に赤字で「タスクは未解決です」というテキストを出現させて,最終的に5個中何個終了したかをボタンの横にテキストで表示させてます。

 

 

3.次回

【part1~7】でtkinterの一通りの機能を確認し,ボタンやチェックボタンを使った機能を作りました。

次回はまだ未定です,Tkinterをより詳しく行う(例えばTodoアプリやカレンダーを作るなど)かpythonの使い方(例えば計算結果をExcel形式で保存する方法、有限差分法を用いた数値計算ニューラルネットワーク、画像認識など)をやるか決まったら気ままに更新していきたいと思います。