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

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

MENU

【python】【tkinter】【初心者】チェックボタンを使おう(1/3)

tkinterでチェックボタンを使ってみよう

 

1.はじめに

今回はtkinterの機能であるチェックボックスを使ってみます。これが終われば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

 

3.説明

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

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

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

変数名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つ作る

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

以下にチェックボックスを5つ作るコード例を載せます。

import tkinter as tk #tkinterの読み込み

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

#チェックボックス(変数名:Check)を5個作成
Check_list=[]
Check_list_val=[]
Check_number=5
for i in range(Check_number):
    Check_val=tk.BooleanVar()
    Check_val.set(True)
    Check=tk.Checkbutton(text="チェックボタン",variable=Check_val)
    Check.place(x=10,y=30*i+30)
    Check_list.append(Check_buttn)
    Check_list_val.append(Check_val)
#ウインドの表示
win.mainloop()

f:id:stjun:20190518235004j:plain

 

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

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)を5個作成
Check_list=[]
Check_list_val=[]
Check_number=5
for i in range(Check_number):
    Check_val=tk.BooleanVar()
    Check_val.set(True)
    Check=tk.Checkbutton(text="チェックボタン",variable=Check_val)
    Check.place(x=10,y=30*i+30)
    Check_list.append(Check_buttn)
    Check_list_val.append(Check_val)

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

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

f:id:stjun:20190519000107j:plain

 

おすすめ書籍 

tkinterは参考書が非常に少ないです、というより日本語の参考書はほぼ皆無です。個人的には以下がお勧めです。

私が勉強していた時は以下のような参考書がなくネットで調べながら苦労してtkinterを覚えましたが、もし当時こんな書籍があったらもっと楽に学べたのに...と思うくらい基本的内容について丁寧に書かれています。

Amazonの月額読み放題サービス「Kindle unlimited」でも読めます。

初回30日間は無料、退会も簡単なので試しに無料体験して読んでみてもよさそうです。

 

4.最後に

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

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

↓次回の記事

www.stjun.com