回答編集履歴
4
コードの修正
test
CHANGED
@@ -5,6 +5,10 @@
|
|
5
5
|
|
6
6
|
|
7
7
|
```python
|
8
|
+
|
9
|
+
import tkinter as tk
|
10
|
+
|
11
|
+
|
8
12
|
|
9
13
|
def btn_click(event):
|
10
14
|
|
@@ -14,11 +18,19 @@
|
|
14
18
|
|
15
19
|
|
16
20
|
|
17
|
-
buttonA = tk.Button(root, text="A")
|
18
21
|
|
19
|
-
buttonA.bind("<ButtonRelease-1>", btn_click)
|
20
22
|
|
23
|
+
if __name__ == "__main__":
|
24
|
+
|
25
|
+
root = tk.Tk()
|
26
|
+
|
27
|
+
button = tk.Button(root, text="A")
|
28
|
+
|
29
|
+
button.bind("<ButtonRelease-1>", btn_click)
|
30
|
+
|
21
|
-
button
|
31
|
+
button.pack()
|
32
|
+
|
33
|
+
root.mainloop()
|
22
34
|
|
23
35
|
```
|
24
36
|
|
@@ -40,7 +52,7 @@
|
|
40
52
|
|
41
53
|
但し、ボタン毎に関数と引数を関連付けしたオブジェクトを作る事になる為、
|
42
54
|
|
43
|
-
簡潔さでいうと bind を使った方が良いです。
|
55
|
+
簡潔さでいうと (可能な場合は) bind を使った方が良いです。
|
44
56
|
|
45
57
|
|
46
58
|
|
@@ -54,23 +66,25 @@
|
|
54
66
|
|
55
67
|
|
56
68
|
|
57
|
-
root = tk.Tk()
|
58
|
-
|
59
69
|
def btn_click(button):
|
60
70
|
|
61
71
|
print(button["text"])
|
62
72
|
|
63
73
|
|
64
74
|
|
65
|
-
for text in ["A", "B", "C"]:
|
66
75
|
|
76
|
+
|
77
|
+
if __name__ == "__main__":
|
78
|
+
|
79
|
+
root = tk.Tk()
|
80
|
+
|
67
|
-
button = tk.Button(root, text=
|
81
|
+
button = tk.Button(root, text="A")
|
68
82
|
|
69
83
|
button["command"] = partial(btn_click, button)
|
70
84
|
|
71
85
|
button.pack()
|
72
86
|
|
73
|
-
root.mainloop()
|
87
|
+
root.mainloop()
|
74
88
|
|
75
89
|
```
|
76
90
|
|
3
コード修正
test
CHANGED
@@ -110,8 +110,6 @@
|
|
110
110
|
|
111
111
|
super().__init__(*args, **kwargs)
|
112
112
|
|
113
|
-
self.config(command=self.onclick)
|
114
|
-
|
115
113
|
|
116
114
|
|
117
115
|
def onclick(self): # インスタンス経由でアクセス
|
@@ -128,6 +126,8 @@
|
|
128
126
|
|
129
127
|
button = MyButton(root, text="A")
|
130
128
|
|
129
|
+
button["command"] = button.onclick
|
130
|
+
|
131
131
|
button.pack()
|
132
132
|
|
133
133
|
root.mainloop()
|
2
追記: 他の方法2: サブクラスを利用する
test
CHANGED
@@ -76,8 +76,6 @@
|
|
76
76
|
|
77
77
|
|
78
78
|
|
79
|
-
----
|
80
|
-
|
81
79
|
NG: CANNOT ... コンストラクタで command を登録する時点ではインスタンスは生成されてない
|
82
80
|
|
83
81
|
|
@@ -87,3 +85,51 @@
|
|
87
85
|
button = tk.Button(root, text="A", command=functools.partial(btn_click, button))
|
88
86
|
|
89
87
|
```
|
88
|
+
|
89
|
+
|
90
|
+
|
91
|
+
----
|
92
|
+
|
93
|
+
他の方法2: サブクラスを利用する
|
94
|
+
|
95
|
+
|
96
|
+
|
97
|
+
クラスを用いた汎用的な解決策
|
98
|
+
|
99
|
+
|
100
|
+
|
101
|
+
```python
|
102
|
+
|
103
|
+
import tkinter as tk
|
104
|
+
|
105
|
+
|
106
|
+
|
107
|
+
class MyButton(tk.Button):
|
108
|
+
|
109
|
+
def __init__(self, *args, **kwargs):
|
110
|
+
|
111
|
+
super().__init__(*args, **kwargs)
|
112
|
+
|
113
|
+
self.config(command=self.onclick)
|
114
|
+
|
115
|
+
|
116
|
+
|
117
|
+
def onclick(self): # インスタンス経由でアクセス
|
118
|
+
|
119
|
+
print(self["text"])
|
120
|
+
|
121
|
+
|
122
|
+
|
123
|
+
|
124
|
+
|
125
|
+
if __name__ == "__main__":
|
126
|
+
|
127
|
+
root = tk.Tk()
|
128
|
+
|
129
|
+
button = MyButton(root, text="A")
|
130
|
+
|
131
|
+
button.pack()
|
132
|
+
|
133
|
+
root.mainloop()
|
134
|
+
|
135
|
+
```
|
1
コードの修正
test
CHANGED
@@ -72,12 +72,18 @@
|
|
72
72
|
|
73
73
|
root.mainloop()
|
74
74
|
|
75
|
+
```
|
75
76
|
|
76
77
|
|
78
|
+
|
79
|
+
----
|
80
|
+
|
77
|
-
|
81
|
+
NG: CANNOT ... コンストラクタで command を登録する時点ではインスタンスは生成されてない
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
```python
|
78
86
|
|
79
87
|
button = tk.Button(root, text="A", command=functools.partial(btn_click, button))
|
80
88
|
|
81
|
-
|
82
|
-
|
83
89
|
```
|