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

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

MENU

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

【Part6】チェックボタンを使ってみよう

1.前回のおさらい

前回はボタンを押す度に新しい入力ボックスが出現する機能を作りました。

f:id:stjun:20190513230907j:plain

前回までーボタンを押すと新しい入力項ができる様子

今回はチェックボックスの機能を確認してみます。これが終わればTkinterの一通りの機能を網羅したことになります。 

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()
 

 

今回はToDoアプリを少し意識して作ってあります。このコードをすると以下のような5つのタスク(チェックボックス )とボタンが表示されます。

f:id:stjun:20190518231837j:plain

例えばタスク1とタスク2を終了したとして、タスク1とタスク2のチェック欄をマウスでクリックしてチェックを入れましょう。

f:id:stjun:20190518232144j:plain

この状態で下部の評価ボタンを押すと、終わったタスクの横には黒字で「タスクは終了しました」、終わってないタスクの横には赤字で「タスクは未解決です」という文字が表示されます。またボタンの横に終了したタスクが5個中2であることが表示されています。

f:id:stjun:20190518232429j:plain

ここでタスク1がやっぱり終わってなく、タスク4が終わっていたため変更したとしましょう。その場合、タスク1のチェックを外し、タスク4のチェックを入れて評価ボタンを再度押してあげます。すると次のようにちゃんと反映されます。

f:id:stjun:20190518232542j:plain

またタスクが全て終わった場合は「お疲れさまでした」と表示します。

f:id:stjun:20190518232720j:plain

 

<説明> 

チェックボックスは通常以下のように作ります。

 

変数名 = tkinter.Checkbutton(text="表示させたい文字")

変数名.place(x座標,y座標)

 

またチェックボックスに最初からチェックを入れておきたい場合などは以下のように書きます。(#以下はコメントです)

 

変数名1=tk.BooleanVar() #BooleanVar()はTrueかFalseを入れることができます

変数名1.set(True) #Trueを入れてます

変数名 = tkinter.Checkbutton(text="表示させたい文字",variable=変数名1) #変数名1はTrueなのでチェックボックスは最初からチェックが入ることになります。

以下にコード例を載せます

import tkinter as tk #tkinterの読み込み

#ウインド(win)を作成
win=tk.Tk()
win.title("Hello world")
win.geometry("500x300") #ウインドの大きさを200×300に設定

#チェックボックス(変数名:Check)の作成
Check_val=tk.BooleanVar()
Check_val.set(True)
Check=tk.Checkbutton(text="チェックボタン",variable=Check_val)
Check.place(x=10,y=10)

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

 

f:id:stjun:20190518234204j:plain

 

 今回はチェックボックスを5つ作りたかったので,for文(ループ)を使っています。

Check_buttn_number=5

for i in range(Check_buttn_number) #チェックボタンを5つ作る

      ~チェックボックスを作るコード~

 

以下にコード例を載せます。

import tkinter as tk #tkinterの読み込み

#ウインド(win)を作成
win=tk.Tk()
win.title("Hello world")
win.geometry("500x300") #ウインドの大きさを200×300に設定

#チェックボックス(変数名:Check)を5個作成
Check_number=5
Check_val=tk.BooleanVar()
Check_val.set(True)
for i in range(Check_number):
    Check=tk.Checkbutton(text="チェックボタン",variable=Check_val)
    Check.place(x=10,y=30*i+30)

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

f:id:stjun:20190518235004j:plain

 

また1行目のラベルと最下部のボタンを作ってしまいましょう。

ラベル・ボタンの作り方は前回までに説明があるので今回は省略します。

 

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

f:id:stjun:20190519000107j:plain

 

import tkinter as tk #tkinterの読み込み

#ウインド(win)を作成
win=tk.Tk()
win.title("Hello world")
win.geometry("500x300") #ウインドの大きさを200×300に設定

#ラベルの作成
label=tk.Label(text="終了したタスクをチェックしてください")
label.place(x=10,y=5)

#チェックボックス(変数名:Check)の作成
Check_number=5
Check_val=tk.BooleanVar()
Check_val.set(True)
for i in range(Check_number):
    Check=tk.Checkbutton(text="チェックボタン",variable=Check_val)
    Check.place(x=10,y=30*i+30)

#ボタンの作成
Button=tk.Button(width=5,text="評価",background="#FFFFFF")
Button.place(x=30,y=250)

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

3.次回

今回は必要なパーツを作りました。

次回はボタンを押すとチェックされた数を読み取り、チェック状態に適した文字を表示する機能を作りたいと思います。