teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2020/10/29 06:48

投稿

8524ba23
8524ba23

スコア38352

answer CHANGED
@@ -43,4 +43,36 @@
43
43
  cbs[cb] = (row, col, var) # 必要な変数をwidgetに紐づけて保持しておく
44
44
 
45
45
  root.mainloop()
46
+ ```
47
+
48
+ teamiklさん提案のfunctools.partialを使った例
49
+ -----
50
+ ```Python
51
+ from tkinter import *
52
+ from tkinter import ttk
53
+ import functools
54
+
55
+ root = Tk()
56
+ root.title('Checkbutton')
57
+
58
+ frame1 = ttk.Frame(root, padding=(10))
59
+ frame1.grid()
60
+
61
+ def after_cb(row, col, var):
62
+ print( f'{row+1},{col+1}={var.get()}')
63
+
64
+ # 1つのcheckbuttonを初期化
65
+ def init_check( frm, row, col):
66
+ var = BooleanVar()
67
+ var.set(False)
68
+ f = functools.partial(after_cb, row, col, var)
69
+ #print(id(f))
70
+ cb = ttk.Checkbutton( frm, padding=10, text=f'{row+1}x{col+1}', variable=var, command=f)
71
+ cb.grid(row=row, column=col)
72
+
73
+ for row in range(2): # 行
74
+ for col in range(3): # 列
75
+ init_check( frame1, row, col)
76
+
77
+ root.mainloop()
46
78
  ```