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

回答編集履歴

3

追記

2020/09/14 12:06

投稿

nto
nto

スコア1438

answer CHANGED
@@ -38,4 +38,84 @@
38
38
  tmp.grid(row=info[0], column=info[1], rowspan=info[2], columnspan=info[3], padx=info[4], pady=info[5], sticky=info[6])
39
39
  Frames.append(tmp)
40
40
 
41
- ```
41
+ ```
42
+
43
+ ### 追記①
44
+ 先程の回答とほぼ同じで、Buttonをクラス化するのかLabelFrameをクラス化するのかの違いだけで
45
+ class化しても今回のケースの場合、あまりこれ以上は綺麗に見える気もしません。
46
+ ```python
47
+ class CreateFrameOne(tk.LabelFrame):
48
+ def __init__(self, master, **kwargs):
49
+ tk.LabelFrame.__init__(self, master, **kwargs)
50
+ self.widget_create()
51
+
52
+ def widget_create(self):
53
+ self.Text_Input_Path = tk.Label(self, text="Input Path ", fg="white", bg="#52514F", font=('Helvetica', 10))
54
+ self.Field_Input_Path = tk.Entry(self, fg="black", highlightbackground="#52514F")
55
+ self.Button_Input_Path = tk.Button(self, text="Open File", highlightbackground="#52514F", font=('Helvetica', 10))
56
+
57
+ self.Text_Input_Path.grid(column=0, row=0, sticky='w')
58
+ self.Field_Input_Path.grid(column=1, row=0, sticky='nsew')
59
+ self.Button_Input_Path.grid(column=2, row=0, sticky='e')
60
+
61
+ class CreateFrameTwo(tk.LabelFrame):
62
+ def __init__(self, master, **kwargs):
63
+ tk.LabelFrame.__init__(self, master, **kwargs)
64
+ self.widget_create()
65
+
66
+ def widget_create(self):
67
+ self.Text_Output_Path = tk.Label(self, text="Output Path", fg="white", bg="#52514F", font=('Helvetica', 10))
68
+ self.Text_Output_Name = tk.Label(self, text="Output Filename", fg="white", bg="#52514F", font=('Helvetica', 10))
69
+ self.Field_Output_Path = tk.Entry(self, fg="black", highlightbackground="#52514F")
70
+ self.Field_Output_Name = tk.Entry(self, fg="black", highlightbackground="#52514F")
71
+ self.Button_Output_Path = tk.Button(self, text="Select Path", highlightbackground="#52514F", pady='2', font=('Helvetica', 10))
72
+ self.Extension_Value = tk.StringVar()
73
+ self.Extension_Value.set(".MOV")
74
+
75
+ self.Text_Output_Path.grid(column=0, row=0, sticky='w')
76
+ self.Field_Output_Path.grid(column=1, row=0, sticky='nsew')
77
+ self.Button_Output_Path.grid(column=2, row=0, sticky='nsew')
78
+ self.Text_Output_Name.grid(column=0, row=1, sticky='w')
79
+ self.Field_Output_Name.grid(column=1, row=1, sticky='nsew')
80
+
81
+ FrameOne = CreateFrameOne(win, text="Input Settings", fg="white", bg="#52514F")
82
+ FrameTwo = CreateFrameOne(win, text="Input Settings", fg="white", bg="#52514F")
83
+ FrameOne.grid(column=2, row=2, padx='20', pady='10', sticky='nsew')
84
+ FrameTwo.grid(column=2, row=3, padx='20', pady='10', sticky='nsew')
85
+ ```
86
+
87
+
88
+ # ②
89
+ それよりかは、目的がスッキリ見やすくさせたいといった場合に関しては
90
+ 「ウィジェットの生成→定義→配置」と同じ動作を何度も繰り返すものであり
91
+ それならば、逆に考えれば同じ動作を繰り返せるという事ならばfor文を使用して簡略化できるという考えでした。
92
+ ```python
93
+ # for文を使用しない場合
94
+ FrameOne = tk.LabelFrame(win, text="Input Settings", fg="white", bg="#52514F", padx="5", pady="5") #Input Settings Frame
95
+ FrameTwo = tk.LabelFrame(win, text="Output Settings", fg="white", bg="#52514F", padx="5", pady="5") #Output Settings Frame
96
+ FrameThree = tk.LabelFrame(win, text="Button", fg="white", bg="#52514F", pady="5", padx="5") #Buttoun Settings Frame
97
+ FrameFour = tk.LabelFrame(win, text="Progress", fg="white", bg="#52514F", padx="5", pady="5") #Progress Settings Frame
98
+ FrameFive = tk.LabelFrame(win, text="Preview", fg="white", bg="#52514F", padx="5", pady="5") #Preview Window Settings Frame
99
+
100
+ FrameOne.grid(column=2, row=2, padx='20', pady='10', sticky='nsew')
101
+ FrameTwo.grid(column=2, row=3, padx='20', pady='10', sticky='nsew')
102
+ FrameThree.grid(column=3, row=2, rowspan=2, padx='20', pady='10', sticky='nsew')
103
+ FrameFour.grid(column=2, columnspan=2, row=4, padx='20', pady='10', sticky='nsew')
104
+ FrameFive.grid(column=2, columnspan=2, row=1, padx='20', pady='10', sticky='nsew')
105
+
106
+ # for文を使用した場合
107
+ Frame_info = {'Input Settings':[2, 2, 1, 1, 20, 10, 'nsew'],
108
+ 'Output Settings':[3, 2, 1, 1, 20, 10, 'nsew'],
109
+ 'Button':[2, 3, 2, 1, 20, 10, 'nsew'],
110
+ 'Progress':[4, 2, 1, 2, 20, 10, 'nsew'],
111
+ 'Preview':[1, 2, 1, 2, 20, 10, 'nsew']}
112
+ Frames = []
113
+ for fname, info in Frame_info.items():
114
+ tmp = tk.LabelFrame(win, text=fname, fg='white', bg=main_bg, padx=5, pady=5)
115
+ tmp.grid(row=info[0], column=info[1], rowspan=info[2], columnspan=info[3], padx=info[4], pady=info[5], sticky=info[6])
116
+ Frames.append(tmp)
117
+ ```
118
+ また「簡読化したい」というだけの目的であればという事を前提にfor文をおすすめしておりましたが
119
+ 何も必ずしもfor文を使うべきであるというものでもなく、また「どうしてもclass化がしたいんだ」という事であれば完全にお門違いな回答を差し上げてしまっておりますのでその場合には申し訳御座いません。
120
+ その場合には①のコードをご参考下さい。
121
+ いずれも見やすいか見やすくないかについては、ご自身が使用するだけのものであるか他者にもコードを共有するのかで変わってくるものである為ご自身にあった方法でコーディングしていく事をおすすめします。

2

修正

2020/09/14 12:06

投稿

nto
nto

スコア1438

answer CHANGED
@@ -21,7 +21,8 @@
21
21
  win.mainloop()
22
22
  ```
23
23
 
24
+ また、クラス化とは違いますがスッキリさせたいという事であれば
24
- また、ウィジェット自体をリストに格納し、for文で設定と配置していくといった手法もあります。
25
+ ウィジェット自体をリストに格納し、for文で設定と配置していくといった手法もあります。
25
26
  個人的にこのやり方はスッキリして好きです。
26
27
  ```python
27
28
  # row, column, columnspan, padx, pady, stickyの順

1

微修正

2020/09/14 07:58

投稿

nto
nto

スコア1438

answer CHANGED
@@ -25,16 +25,16 @@
25
25
  個人的にこのやり方はスッキリして好きです。
26
26
  ```python
27
27
  # row, column, columnspan, padx, pady, stickyの順
28
- # (columnspanのデフォルト値は1の為、指定なしの場合は1を指定)
28
+ # (rowspan,columnspanのデフォルト値は1の為、指定なしの場合は1を指定)
29
- Frame_info = {'Input Settings':[2, 2, 1, 20, 10, 'nsew'],
29
+ Frame_info = {'Input Settings':[2, 2, 1, 1, 20, 10, 'nsew'],
30
- 'Output Settings':[3, 2, 1, 20, 10, 'nsew'],
30
+ 'Output Settings':[3, 2, 1, 1, 20, 10, 'nsew'],
31
- 'Button':[2, 3, 2, 20, 10, 'nsew'],
31
+ 'Button':[2, 3, 2, 1, 20, 10, 'nsew'],
32
- 'Progress':[4, 2, 2, 20, 10, 'nsew'],
32
+ 'Progress':[4, 2, 1, 2, 20, 10, 'nsew'],
33
- 'Preview':[1, 2, 2, 20, 10, 'nsew']}
33
+ 'Preview':[1, 2, 1, 2, 20, 10, 'nsew']}
34
34
  Frames = []
35
35
  for fname, info in Frame_info.items():
36
- tmp = tk.LabelFrame(win, text=fname, fg='white', bg='#52514F')
36
+ tmp = tk.LabelFrame(win, text=fname, fg='white', bg='#52514F', padx=5, pady=5)
37
- tmp.grid(row=info[0], column=info[1], columnspan=info[2], padx=info[3], pady=info[4], sticky=info[5])
37
+ tmp.grid(row=info[0], column=info[1], rowspan=info[2], columnspan=info[3], padx=info[4], pady=info[5], sticky=info[6])
38
38
  Frames.append(tmp)
39
39
 
40
40
  ```