質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

【Python】【Tkinter】表の各行の横に設定したCheckboxについて、チェックされたレコード番号を取得したい

simatanuki
simatanuki

総合スコア1

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1回答

0評価

0クリップ

324閲覧

投稿2021/11/28 10:54

前提・実現したいこと

【Python】【Tkinter】表の各行の横に設定したCheckboxについて、チェックされたレコード番号を取得したい
ここに質問の内容を詳しく書いてください。
Tkinterのチェックボックスを複数配置し、チェックボックスを押したときに値(True、False)を取得する関数をつくりたいです。

発生している問題・エラーメッセージ

Tkinterで、七行の表を作って、その横にチェックボックスを設定するところまでは実装できたのですが、、、 チェックを入れたボックスが何行目にあるかを取得する機能を付けることができません。 どうしたらよいでしょうか。 いまのところ、できているコードと出力画面を以下に示します。。。 どうぞよろしくお願いします。

Pythonのソースコード

import tkinter from tkinter import * import tkinter.ttk # マウスボタンが押されていているかどうかの判断用 press = False #------------------------------------------------------------ def btn_click(bln): print(bln,"★",btn) # chk_bln[i].set(bln[i]) # counter=0 # for i in range(erow-2): # print(bln,"★",i) # if bln[i]: # print(counter[i]," : ",bln[i]) # chk_bln[i]=bln #------------------------------------------------------------ root = tkinter.Tk() root.title('○○物資配布先候補 編集対象選択画面') #タイトル root.geometry('640x200') #サイズ #表用のリスト(あとでExcel読み込みに対応させる) list_keyword = ['○○○○ ○○○○○○','◇◇◇◇ ◇◇◇◇◇◇','□□□□ □□□□□□','△△△△ △△△△△△','○○◇◇ ○○◇◇○○','△△○○','□□△△□□'] list_pref = ['東京','東京','東京','東京','東京','東京','東京'] list_city = ['八王子','八王子','世田谷区','調布市','小平市','練馬区','武蔵野市'] list_title = ['生活補助','生活補助','生活補助','高齢者','障害者','生活補助','障害者'] list_tel = ['042-***-****','03-****-****','03-****-****','03-****-****','03-****-****','042-***-****','03-****-****'] num_list = len(list_keyword) #リストの数 #Canvas widgetを生成 canvas = tkinter.Canvas(root,width=640,height=400,bg='white') #背景を白に canvas.grid(row=1,rowspan=num_list,column=0,columnspan=5) #7行x5列分 #スクロールバー vbar=tkinter.ttk.Scrollbar(root,orient=tkinter.VERTICAL) #縦方向 vbar.grid(row=1,rowspan=7,column=5,sticky='ns') #7行分の長さで設置 #スクロールバーの制御をCanvasに通知する処理 vbar.config(command=canvas.yview) #Canvasの可動域をスクロールバーに通知する処理 canvas.config(yscrollcommand=vbar.set) #スクロール可動域<=これがないと、どこまでもスクロールされてしまう。 sc_hgt=int(150/6*(num_list+1)) #スクロールの縦の範囲 リストの数+ヘッダー分に canvas.config(scrollregion=(0,0,500,sc_hgt)) #Frameを作成 frame = tkinter.Frame(canvas,bg='white') #背景を白に #frameをcanvasに配置 canvas.create_window((0,0),window=frame,anchor=tkinter.NW,width=canvas.cget('width')) #anchor<=NWで左上に寄せる #header row=1に設定する文字列 余白は0に e0=tkinter.Label(frame,width=5,text='select',background='white') e0.grid(row=1,column=0,padx=0,pady=0,ipadx=0,ipady=0) #0列目 # ボタンの作成 btn = tkinter.Button(root, text='選択', command=lambda:btn_click(True)) btn.place(x=15, y=0) #ボタンを配置する位置の設定 #---------------------------------------------------------------- e1=tkinter.Label(frame,width=25,text='団体名',background='white') e1.grid(row=1,column=1,padx=0,pady=0,ipadx=0,ipady=0) #1列目 e2=tkinter.Label(frame,width=12,text='都道府県',background='white') e2.grid(row=1,column=2,padx=0,pady=0,ipadx=0,ipady=0) #2列目 e3=tkinter.Label(frame,width=12,text='市町村',background='white') e3.grid(row=1,column=3,padx=0,pady=0,ipadx=0,ipady=0) #2列目 e4=tkinter.Label(frame,width=12,text='活動内容',background='white') e4.grid(row=1,column=4,padx=0,pady=0,ipadx=0,ipady=0) #3列目 e5=tkinter.Label(frame,width=14,text='電話番号',background='white') e5.grid(row=1,column=5,padx=0,pady=0,ipadx=0,ipady=0) #4列目 irow = 2 irow0=2 bln={} chk_bln = {} erow=num_list+irow0 while irow < erow: #リストの数分ループしてLabelとチェックボックスを設置 #色の設定 if irow%2==0: color='#cdfff7' #薄い青 else: color='white' #チェックボックスの設置 bln[irow]=tkinter.BooleanVar() bln[irow].set(False) #チェックボックスの初期値 chk = tkinter.Checkbutton(frame,variable = irow, text="", width=5,background='white') chk.grid(row=irow,column=0,padx=0,pady=0,ipadx=0,ipady=0) #0列目 #検索キーワード a1=list_keyword[irow-irow0] b1=tkinter.Label(frame,width=25,text=a1,background=color) b1.grid(row=irow,column=1,padx=0,pady=0,ipadx=0,ipady=0) #1列目 #検索順位 a2=list_pref[irow-irow0] b2=tkinter.Label(frame,width=10,text=a2,background=color) b2.grid(row=irow,column=2,padx=0,pady=0,ipadx=0,ipady=0) #2列目 #検索順位 a3=list_city[irow-irow0] b3=tkinter.Label(frame,width=10,text=a3,background=color) b3.grid(row=irow,column=3,padx=0,pady=0,ipadx=0,ipady=0) #2列目 #記事タイトル a4=list_title[irow-irow0] b4=tkinter.Label(frame,width=12,text=a4,background=color) b4.grid(row=irow,column=4,padx=0,pady=0,ipadx=0,ipady=0) #3列目 #記事タイトル2 a5=list_tel[irow-irow0] b5=tkinter.Label(frame,width=14,text=a5,background=color) b5.grid(row=irow,column=5,padx=0,pady=0,ipadx=0,ipady=0) #4列目 irow=irow+1 #ウィンドウを動かす root.mainloop()

試したこと

イメージ説明

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。