回答編集履歴

3

よくある問題へのリンクを追加

2020/07/08 23:43

投稿

teamikl
teamikl

スコア8760

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

サンプルコード手入れ

2020/07/08 23:43

投稿

teamikl
teamikl

スコア8760

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).pack()
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

説明補足

2020/07/08 18:40

投稿

teamikl
teamikl

スコア8760

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