Python/tkinter 複数チェックボックス(Checkbutton)の制御

2019 9/03
Python/tkinter 複数チェックボックス(Checkbutton)の制御

Python初心者がブログの検索順位取得ツールを作っています。

今まで、キーワードを検索してファイルに書き出す部分、ちょっとしたGUIの作成等を行ってきました。

今回は、画面に表示された表のチェックボックス(Checkbutton)の制御部分を作成していきます。

  • 複数行にわたって配置されたチェックボックスが個々に動作すること
  • 全部一括選択/全部一括解除ができること
  • チェックされた行のキーワードを取得できること

を目標にしていきます。

現状の画面は以下のとおり。

前回はキーワードやタイトルをソースに埋め込んでいましたが、Excelファイルを読み込めるように改良しました。

また、必要なボタンも追加し、画面案に近い画面が出せるようになっています。

検索順位Excelファイルを読み込ませた画面
作りたい画面
当初の画面案
目次

複数チェックボックスを制御するソースコード

Python/tkinterで複数のチェックボックス(Checkbutton)の動作を作りこんでみました。

チェックボックス(Checkbutton)に関連する箇所のみ載せます。

ちなみに、ソースの行が多くなってきたので、今回から関数化させてみました。

今回の重要箇所は、106行目からのチェックボックスの配置の部分、141行目からの全選択/全解除ボタンの動作、あとは161行目からのチェックされている行の取得する部分です。

108行目のCheckbuttonの宣言で「variable=」と指定してあげるのがポイント。variableで指定した変数にチェックボックスの値 (True/False) が格納されます。

そして「list_chk」というリストに各チェックボックスの値を保持するようにしました。

チェックボックスの値を設定するには「set(True/False)」(143,148行目)を、チェックボックスの値を取得するには「get()」(162行目)を使用します。

画面下部に配置した「全て選択」ボタンをクリックすると、全ての行のチェックボックスがチェックされます。
「選択解除」ボタンをクリックすると、チェックされている行のチェックボックスが全てチェックを外されるようになっています。

スポンサーリンク

実行結果

上記で作成したコードを動かしてみました。

今回はScreenToGifというツールを使って、動画を操作している動画を撮ってみました。

複数のチェックボックスの動作確認しているGIF動画
チェックボックスの動作確認結果

やりたいこと

  • 「全て選択」ボタンで全部のチェックボックスをチェック
  • 「選択解除」ボタンで全部のチェックを外す
  • チェックボックスを個別にチェックできる(連動していない)

ができています。

また、動画には出していませんが、「make plot」ボタンを押すとコマンド画面にチェックされた行のキーワード一覧が表示されるようになっています。

注意点

複数あるチェックボックスを制御するうえで躓いたところがあります。

最初、チェックボックス設置の部分で、チェックボックスの初期値をループの外で設定していました。

そうすると全てのチェックボックスが連動してしまい、1つチェックを入れると全てチェックされてしまうようになってしまいました。

チェックボックスが連動してしまっている動画
チェックボックスが連動してしまっている

そのときのコード(抜粋)がこちら。

1,2行目の初期値(bln)の設定をwhile文の中に入れたら、チェックボックスが個別に動作するようになりました。

初期値は全部Falseなんだから、1回宣言すればいいじゃん、と思っていたのですが、そうではないようです。


こんなわけで、だいぶGUIもツールとして様になってきました。

あとはチェックされた行のデータでプロットを作成する機能が必要なので、そこを作っていきます。

んじゃ、また~

関連記事

応援よろしくお願いします☆

この記事を書いた人

理系夫婦の妻のほうです。
大学、大学院(修士)で物理を専攻。
2016年に長女を出産、2021年に長男を出産。
フルタイム勤務ワーママ→休職→専業主婦。

コメント

コメントする

目次
閉じる