回答編集履歴
3
よくある問題へのリンクを追加
answer
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
関連付けるのオブジェクトを束縛できます。
|
5
5
|
|
6
6
|
簡易的には lambda を使っても同様の事は可能ですが、
|
7
|
-
for文内で扱う場合は変数スコープの問題があるので partial推奨
|
7
|
+
[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推奨
|
8
8
|
|
9
9
|
```python
|
10
10
|
|
2
サンプルコード手入れ
answer
CHANGED
@@ -43,6 +43,8 @@
|
|
43
43
|
インスタンス変数で関連付けられたウィジェットにアクセスできます。
|
44
44
|
|
45
45
|
```python
|
46
|
+
#!/usr/bin/env python3.8
|
47
|
+
|
46
48
|
import os
|
47
49
|
import tkinter as tk
|
48
50
|
from tkinter import ttk
|
@@ -57,6 +59,7 @@
|
|
57
59
|
visibleVar = self._visible = tk.BooleanVar()
|
58
60
|
filepathVar = self._filepath = tk.StringVar()
|
59
61
|
|
62
|
+
self["text"] = dataName
|
60
63
|
filepathVar.trace("w", self.onFilepathChanged)
|
61
64
|
|
62
65
|
check = tk.Checkbutton(self, variable=visibleVar)
|
@@ -68,10 +71,15 @@
|
|
68
71
|
for w in [check, entry, button1, button2]:
|
69
72
|
w.pack(side=tk.LEFT)
|
70
73
|
|
74
|
+
@property
|
75
|
+
def filepath(self):
|
76
|
+
return self._filepath.get()
|
77
|
+
|
71
78
|
def onFilepathChanged(self, *args):
|
72
|
-
filepath = self._filepath.get()
|
79
|
+
#filepath = self._filepath.get()
|
73
|
-
dataName = os.path.splitext(os.path.basename(filepath))[0]
|
80
|
+
#dataName = os.path.splitext(os.path.basename(filepath))[0]
|
74
|
-
self.config(text=dataName)
|
81
|
+
#self.config(text=dataName)
|
82
|
+
self.event_generate("<<FileInputField_filepathChanged>>")
|
75
83
|
|
76
84
|
def selectFile(self):
|
77
85
|
filepath = askopenfilename(filetypes=[("", "*.csv")])
|
@@ -84,14 +92,21 @@
|
|
84
92
|
event.widget.config(bg=color)
|
85
93
|
|
86
94
|
|
95
|
+
def changed(event):
|
96
|
+
if isinstance(event.widget, FileInputField):
|
97
|
+
print(event.widget.filepath)
|
98
|
+
|
99
|
+
|
87
100
|
def main():
|
88
101
|
root = tk.Tk()
|
89
102
|
for dataName, color in zip(["Data1", "Data2", "Data3"], ["red", "green", "blue"]):
|
90
|
-
FileInputField(root, dataName, color)
|
103
|
+
field = FileInputField(root, dataName, color)
|
91
|
-
|
104
|
+
field.bind("<<FileInputField_filepathChanged>>", changed)
|
105
|
+
field.pack()
|
92
106
|
root.mainloop()
|
93
107
|
|
94
108
|
|
95
109
|
if __name__ == '__main__':
|
96
110
|
main()
|
111
|
+
|
97
112
|
```
|
1
説明補足
answer
CHANGED
@@ -36,8 +36,10 @@
|
|
36
36
|
```
|
37
37
|
|
38
38
|
----
|
39
|
+
> ボタンの数が多くなる予定なのでできれば、for文を使って効率よくコードを書きたいと思っています。
|
40
|
+
|
39
41
|
他の解決策:
|
40
|
-
一連のウィジェット/オブジェクトをひとつのクラスに纏める
|
42
|
+
一連のウィジェット/オブジェクトをひとつのクラスに纏めると、
|
41
43
|
インスタンス変数で関連付けられたウィジェットにアクセスできます。
|
42
44
|
|
43
45
|
```python
|