回答編集履歴

2

追記

2018/05/12 09:46

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -35,3 +35,87 @@
35
35
  (B1) textオプションは無視される
36
36
 
37
37
  (B2) 初期テキストは(A2)で生成されたStringVarの内容となる
38
+
39
+
40
+
41
+ ---
42
+
43
+ 追記:質問者さんがやりたいことが今一つピンときてはいないのですが、ウィジェットの標準的なプロパティとは別にアプリケーションで固有の情報をウィジェットに結び付けておきたいと解釈しました。どうするのがベストか自信ないですが、以下の例では「userOwnValue」という名前でアプリケーション固有情報をウィジェットの属性として直接設定してしまう例です。tkinter.Labelの派生クラスを定義してその中に`__value`のようなtkinterと絶対に衝突しない名前を定義すると安全とは思いますがそこまで厳密にすべきかどうか自分にはわかりませんでした。
44
+
45
+
46
+
47
+ ```python
48
+
49
+ import tkinter as tk
50
+
51
+
52
+
53
+
54
+
55
+ root = tk.Tk()
56
+
57
+ size = 40
58
+
59
+
60
+
61
+ labelB = None
62
+
63
+
64
+
65
+
66
+
67
+ def on_click_common(event):
68
+
69
+ print('text of clicked label =', event.widget['text'])
70
+
71
+ print('userOwnValue of the label =', event.widget.userOwnValue)
72
+
73
+
74
+
75
+
76
+
77
+ def on_click_a(event):
78
+
79
+ global labelB
80
+
81
+ if labelB is None:
82
+
83
+ # まだlabelBを生成してない場合のみ生成する
84
+
85
+ labelB = tk.Label(root, text="×", font=size)
86
+
87
+ labelB.userOwnValue = 2
88
+
89
+ labelB.place(x=size)
90
+
91
+ labelB.bind("<1>", on_click_b)
92
+
93
+ on_click_common(event)
94
+
95
+
96
+
97
+
98
+
99
+ def on_click_b(event):
100
+
101
+ on_click_common(event)
102
+
103
+
104
+
105
+
106
+
107
+ labelA = tk.Label(root, text="○", font=size)
108
+
109
+ labelA.userOwnValue = 1
110
+
111
+ labelA.place(x=0)
112
+
113
+ labelA.bind("<1>", on_click_a)
114
+
115
+
116
+
117
+
118
+
119
+ tk.mainloop()
120
+
121
+ ```

1

追記

2018/05/12 09:46

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
File without changes