前提・実現したいこと
【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/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/28 23:32
2021/11/28 23:47
2021/11/29 00:38