teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

6

実装例追加

2020/08/28 21:28

投稿

shiracamus
shiracamus

スコア5406

answer CHANGED
@@ -48,4 +48,56 @@
48
48
 
49
49
  if __name__ == '__main__':
50
50
  main()
51
+ ```
52
+
53
+ クラスの外側の関数で実行したいのであれば、復帰値でもらう手もあります。
54
+
55
+ ```python
56
+ import os
57
+ from tkinter import *
58
+ from tkinter import ttk
59
+ from tkinter import filedialog
60
+
61
+
62
+ def select_file():
63
+ ftype = [("", "*")]
64
+ idir = os.path.abspath(os.path.dirname(__file__))
65
+ filepath = filedialog.askopenfilename(filetypes=ftype, initialdir=idir)
66
+ return filepath
67
+
68
+
69
+ class ToolsGUI:
70
+
71
+ def __init__(self, root):
72
+ # Frame1の作成
73
+ frame1 = ttk.Frame(root, padding=10)
74
+ frame1.grid()
75
+
76
+ # 参照ボタンの作成
77
+ select_button = ttk.Button(frame1, text=u'参照', command=lambda: self.file1.set(select_file()))
78
+ select_button.grid(row=0, column=3)
79
+
80
+ s = StringVar()
81
+ s.set('ファイル>>')
82
+ label1 = ttk.Label(frame1, textvariable=s)
83
+ label1.grid(row=0, column=0)
84
+
85
+ # 参照ファイルパス表示ラベルの作成
86
+ self.file1 = StringVar()
87
+ file1_entry = ttk.Entry(frame1, textvariable=self.file1, width=50)
88
+ file1_entry.grid(row=0, column=2)
89
+
90
+ def get_filepath(self):
91
+ return self.file1.get()
92
+
93
+
94
+ def main():
95
+ root = Tk()
96
+ root.title('グループ一覧作成ツール')
97
+ gui = ToolsGUI(root)
98
+ root.mainloop()
99
+ print(gui.get_filepath())
100
+
101
+ if __name__ == '__main__':
102
+ main()
51
103
  ```

5

説明表記修正

2020/08/28 21:28

投稿

shiracamus
shiracamus

スコア5406

answer CHANGED
@@ -1,5 +1,5 @@
1
1
  クラス直下には、クラス変数定義とメソッド定義を書き、インスタンス生成して使うのが一般的です。
2
- メソッド間で共有したいデータはインスタンス自身selfに代入するといいです
2
+ メソッド間で共有したいデータはインスタンス自身(self)に代入しておきます。
3
3
 
4
4
  ```python
5
5
  import os
@@ -35,7 +35,7 @@
35
35
  filepath = filedialog.askopenfilename(filetypes=ftype, initialdir=idir)
36
36
  self.file1.set(filepath)
37
37
 
38
- def get_path(self):
38
+ def get_filepath(self):
39
39
  return self.file1.get()
40
40
 
41
41
 
@@ -44,7 +44,7 @@
44
44
  root.title('グループ一覧作成ツール')
45
45
  gui = ToolsGUI(root)
46
46
  root.mainloop()
47
- print(gui.get_path())
47
+ print(gui.get_filepath())
48
48
 
49
49
  if __name__ == '__main__':
50
50
  main()

4

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

2020/08/28 21:14

投稿

shiracamus
shiracamus

スコア5406

answer CHANGED
@@ -10,9 +10,9 @@
10
10
 
11
11
  class ToolsGUI:
12
12
 
13
- def __init__(self, win):
13
+ def __init__(self, root):
14
14
  # Frame1の作成
15
- frame1 = ttk.Frame(win, padding=10)
15
+ frame1 = ttk.Frame(root, padding=10)
16
16
  frame1.grid()
17
17
 
18
18
  # 参照ボタンの作成
@@ -30,9 +30,9 @@
30
30
  file1_entry.grid(row=0, column=2)
31
31
 
32
32
  def button_click(self):
33
- fileType = [("", "*")]
33
+ ftype = [("", "*")]
34
- iDir = os.path.abspath(os.path.dirname(__file__))
34
+ idir = os.path.abspath(os.path.dirname(__file__))
35
- filepath = filedialog.askopenfilename(filetypes=fileType, initialdir=iDir)
35
+ filepath = filedialog.askopenfilename(filetypes=ftype, initialdir=idir)
36
36
  self.file1.set(filepath)
37
37
 
38
38
  def get_path(self):

3

get_pathメソッド追加

2020/08/28 21:11

投稿

shiracamus
shiracamus

スコア5406

answer CHANGED
@@ -35,13 +35,16 @@
35
35
  filepath = filedialog.askopenfilename(filetypes=fileType, initialdir=iDir)
36
36
  self.file1.set(filepath)
37
37
 
38
+ def get_path(self):
39
+ return self.file1.get()
38
40
 
41
+
39
42
  def main():
40
43
  root = Tk()
41
44
  root.title('グループ一覧作成ツール')
42
45
  gui = ToolsGUI(root)
43
46
  root.mainloop()
44
- print(gui.file1.get())
47
+ print(gui.get_path())
45
48
 
46
49
  if __name__ == '__main__':
47
50
  main()

2

説明追加

2020/08/28 10:09

投稿

shiracamus
shiracamus

スコア5406

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

1

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

2020/08/28 10:03

投稿

shiracamus
shiracamus

スコア5406

answer CHANGED
@@ -40,6 +40,7 @@
40
40
  root.title('グループ一覧作成ツール')
41
41
  gui = ToolsGUI(root)
42
42
  root.mainloop()
43
+ print(gui.file1.get())
43
44
 
44
45
  if __name__ == '__main__':
45
46
  main()