回答編集履歴
3
よくある問題へのリンクを追加
test
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
|
11
11
|
簡易的には lambda を使っても同様の事は可能ですが、
|
12
12
|
|
13
|
-
for文内で扱う場合は変数スコープの問題があるので partial推奨
|
13
|
+
[for文内で扱う場合は変数スコープの問題](https://docs.python.org/ja/3/faq/programming.html#why-do-lambdas-defined-in-a-loop-with-different-values-all-return-the-same-result)があるので partial推奨
|
14
14
|
|
15
15
|
|
16
16
|
|
2
サンプルコード手入れ
test
CHANGED
@@ -88,6 +88,10 @@
|
|
88
88
|
|
89
89
|
```python
|
90
90
|
|
91
|
+
#!/usr/bin/env python3.8
|
92
|
+
|
93
|
+
|
94
|
+
|
91
95
|
import os
|
92
96
|
|
93
97
|
import tkinter as tk
|
@@ -116,6 +120,8 @@
|
|
116
120
|
|
117
121
|
|
118
122
|
|
123
|
+
self["text"] = dataName
|
124
|
+
|
119
125
|
filepathVar.trace("w", self.onFilepathChanged)
|
120
126
|
|
121
127
|
|
@@ -138,13 +144,23 @@
|
|
138
144
|
|
139
145
|
|
140
146
|
|
147
|
+
@property
|
148
|
+
|
149
|
+
def filepath(self):
|
150
|
+
|
151
|
+
return self._filepath.get()
|
152
|
+
|
153
|
+
|
154
|
+
|
141
155
|
def onFilepathChanged(self, *args):
|
142
156
|
|
143
|
-
filepath = self._filepath.get()
|
157
|
+
#filepath = self._filepath.get()
|
144
|
-
|
158
|
+
|
145
|
-
dataName = os.path.splitext(os.path.basename(filepath))[0]
|
159
|
+
#dataName = os.path.splitext(os.path.basename(filepath))[0]
|
146
|
-
|
160
|
+
|
147
|
-
self.config(text=dataName)
|
161
|
+
#self.config(text=dataName)
|
162
|
+
|
163
|
+
self.event_generate("<<FileInputField_filepathChanged>>")
|
148
164
|
|
149
165
|
|
150
166
|
|
@@ -170,15 +186,27 @@
|
|
170
186
|
|
171
187
|
|
172
188
|
|
189
|
+
def changed(event):
|
190
|
+
|
191
|
+
if isinstance(event.widget, FileInputField):
|
192
|
+
|
193
|
+
print(event.widget.filepath)
|
194
|
+
|
195
|
+
|
196
|
+
|
197
|
+
|
198
|
+
|
173
199
|
def main():
|
174
200
|
|
175
201
|
root = tk.Tk()
|
176
202
|
|
177
203
|
for dataName, color in zip(["Data1", "Data2", "Data3"], ["red", "green", "blue"]):
|
178
204
|
|
179
|
-
FileInputField(root, dataName, color)
|
205
|
+
field = FileInputField(root, dataName, color)
|
206
|
+
|
180
|
-
|
207
|
+
field.bind("<<FileInputField_filepathChanged>>", changed)
|
208
|
+
|
181
|
-
|
209
|
+
field.pack()
|
182
210
|
|
183
211
|
root.mainloop()
|
184
212
|
|
@@ -190,4 +218,6 @@
|
|
190
218
|
|
191
219
|
main()
|
192
220
|
|
221
|
+
|
222
|
+
|
193
223
|
```
|
1
説明補足
test
CHANGED
@@ -74,9 +74,13 @@
|
|
74
74
|
|
75
75
|
----
|
76
76
|
|
77
|
+
> ボタンの数が多くなる予定なのでできれば、for文を使って効率よくコードを書きたいと思っています。
|
78
|
+
|
79
|
+
|
80
|
+
|
77
81
|
他の解決策:
|
78
82
|
|
79
|
-
一連のウィジェット/オブジェクトをひとつのクラスに纏める
|
83
|
+
一連のウィジェット/オブジェクトをひとつのクラスに纏めると、
|
80
84
|
|
81
85
|
インスタンス変数で関連付けられたウィジェットにアクセスできます。
|
82
86
|
|