回答編集履歴

6

実装例追加

2020/08/28 21:28

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -99,3 +99,107 @@
99
99
  main()
100
100
 
101
101
  ```
102
+
103
+
104
+
105
+ クラスの外側の関数で実行したいのであれば、復帰値でもらう手もあります。
106
+
107
+
108
+
109
+ ```python
110
+
111
+ import os
112
+
113
+ from tkinter import *
114
+
115
+ from tkinter import ttk
116
+
117
+ from tkinter import filedialog
118
+
119
+
120
+
121
+
122
+
123
+ def select_file():
124
+
125
+ ftype = [("", "*")]
126
+
127
+ idir = os.path.abspath(os.path.dirname(__file__))
128
+
129
+ filepath = filedialog.askopenfilename(filetypes=ftype, initialdir=idir)
130
+
131
+ return filepath
132
+
133
+
134
+
135
+
136
+
137
+ class ToolsGUI:
138
+
139
+
140
+
141
+ def __init__(self, root):
142
+
143
+ # Frame1の作成
144
+
145
+ frame1 = ttk.Frame(root, padding=10)
146
+
147
+ frame1.grid()
148
+
149
+
150
+
151
+ # 参照ボタンの作成
152
+
153
+ select_button = ttk.Button(frame1, text=u'参照', command=lambda: self.file1.set(select_file()))
154
+
155
+ select_button.grid(row=0, column=3)
156
+
157
+
158
+
159
+ s = StringVar()
160
+
161
+ s.set('ファイル>>')
162
+
163
+ label1 = ttk.Label(frame1, textvariable=s)
164
+
165
+ label1.grid(row=0, column=0)
166
+
167
+
168
+
169
+ # 参照ファイルパス表示ラベルの作成
170
+
171
+ self.file1 = StringVar()
172
+
173
+ file1_entry = ttk.Entry(frame1, textvariable=self.file1, width=50)
174
+
175
+ file1_entry.grid(row=0, column=2)
176
+
177
+
178
+
179
+ def get_filepath(self):
180
+
181
+ return self.file1.get()
182
+
183
+
184
+
185
+
186
+
187
+ def main():
188
+
189
+ root = Tk()
190
+
191
+ root.title('グループ一覧作成ツール')
192
+
193
+ gui = ToolsGUI(root)
194
+
195
+ root.mainloop()
196
+
197
+ print(gui.get_filepath())
198
+
199
+
200
+
201
+ if __name__ == '__main__':
202
+
203
+ main()
204
+
205
+ ```

5

説明表記修正

2020/08/28 21:28

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -1,6 +1,6 @@
1
1
  クラス直下には、クラス変数定義とメソッド定義を書き、インスタンス生成して使うのが一般的です。
2
2
 
3
- メソッド間で共有したいデータはインスタンス自身selfに代入するといいです
3
+ メソッド間で共有したいデータはインスタンス自身(self)に代入しておきます。
4
4
 
5
5
 
6
6
 
@@ -72,7 +72,7 @@
72
72
 
73
73
 
74
74
 
75
- def get_path(self):
75
+ def get_filepath(self):
76
76
 
77
77
  return self.file1.get()
78
78
 
@@ -90,7 +90,7 @@
90
90
 
91
91
  root.mainloop()
92
92
 
93
- print(gui.get_path())
93
+ print(gui.get_filepath())
94
94
 
95
95
 
96
96
 

4

変数名変更(変数名は小文字とアンダースコアのみ使用)

2020/08/28 21:14

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -22,11 +22,11 @@
22
22
 
23
23
 
24
24
 
25
- def __init__(self, win):
25
+ def __init__(self, root):
26
26
 
27
27
  # Frame1の作成
28
28
 
29
- frame1 = ttk.Frame(win, padding=10)
29
+ frame1 = ttk.Frame(root, padding=10)
30
30
 
31
31
  frame1.grid()
32
32
 
@@ -62,11 +62,11 @@
62
62
 
63
63
  def button_click(self):
64
64
 
65
- fileType = [("", "*")]
65
+ ftype = [("", "*")]
66
66
 
67
- iDir = os.path.abspath(os.path.dirname(__file__))
67
+ idir = os.path.abspath(os.path.dirname(__file__))
68
68
 
69
- filepath = filedialog.askopenfilename(filetypes=fileType, initialdir=iDir)
69
+ filepath = filedialog.askopenfilename(filetypes=ftype, initialdir=idir)
70
70
 
71
71
  self.file1.set(filepath)
72
72
 

3

get_pathメソッド追加

2020/08/28 21:11

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -72,6 +72,12 @@
72
72
 
73
73
 
74
74
 
75
+ def get_path(self):
76
+
77
+ return self.file1.get()
78
+
79
+
80
+
75
81
 
76
82
 
77
83
  def main():
@@ -84,7 +90,7 @@
84
90
 
85
91
  root.mainloop()
86
92
 
87
- print(gui.file1.get())
93
+ print(gui.get_path())
88
94
 
89
95
 
90
96
 

2

説明追加

2020/08/28 10:09

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -1,4 +1,6 @@
1
1
  クラス直下には、クラス変数定義とメソッド定義を書き、インスタンス生成して使うのが一般的です。
2
+
3
+ メソッド間で共有したいデータはインスタンス自身のselfに代入するといいです。
2
4
 
3
5
 
4
6
 

1

ウィンドウを閉じたときに選択内容を表示

2020/08/28 10:03

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -82,6 +82,8 @@
82
82
 
83
83
  root.mainloop()
84
84
 
85
+ print(gui.file1.get())
86
+
85
87
 
86
88
 
87
89
  if __name__ == '__main__':