回答編集履歴

3

追記

2020/09/14 12:06

投稿

nto
nto

スコア1438

test CHANGED
@@ -79,3 +79,163 @@
79
79
 
80
80
 
81
81
  ```
82
+
83
+
84
+
85
+ ### 追記①
86
+
87
+ 先程の回答とほぼ同じで、Buttonをクラス化するのかLabelFrameをクラス化するのかの違いだけで
88
+
89
+ class化しても今回のケースの場合、あまりこれ以上は綺麗に見える気もしません。
90
+
91
+ ```python
92
+
93
+ class CreateFrameOne(tk.LabelFrame):
94
+
95
+ def __init__(self, master, **kwargs):
96
+
97
+ tk.LabelFrame.__init__(self, master, **kwargs)
98
+
99
+ self.widget_create()
100
+
101
+
102
+
103
+ def widget_create(self):
104
+
105
+ self.Text_Input_Path = tk.Label(self, text="Input Path ", fg="white", bg="#52514F", font=('Helvetica', 10))
106
+
107
+ self.Field_Input_Path = tk.Entry(self, fg="black", highlightbackground="#52514F")
108
+
109
+ self.Button_Input_Path = tk.Button(self, text="Open File", highlightbackground="#52514F", font=('Helvetica', 10))
110
+
111
+
112
+
113
+ self.Text_Input_Path.grid(column=0, row=0, sticky='w')
114
+
115
+ self.Field_Input_Path.grid(column=1, row=0, sticky='nsew')
116
+
117
+ self.Button_Input_Path.grid(column=2, row=0, sticky='e')
118
+
119
+
120
+
121
+ class CreateFrameTwo(tk.LabelFrame):
122
+
123
+ def __init__(self, master, **kwargs):
124
+
125
+ tk.LabelFrame.__init__(self, master, **kwargs)
126
+
127
+ self.widget_create()
128
+
129
+
130
+
131
+ def widget_create(self):
132
+
133
+ self.Text_Output_Path = tk.Label(self, text="Output Path", fg="white", bg="#52514F", font=('Helvetica', 10))
134
+
135
+ self.Text_Output_Name = tk.Label(self, text="Output Filename", fg="white", bg="#52514F", font=('Helvetica', 10))
136
+
137
+ self.Field_Output_Path = tk.Entry(self, fg="black", highlightbackground="#52514F")
138
+
139
+ self.Field_Output_Name = tk.Entry(self, fg="black", highlightbackground="#52514F")
140
+
141
+ self.Button_Output_Path = tk.Button(self, text="Select Path", highlightbackground="#52514F", pady='2', font=('Helvetica', 10))
142
+
143
+ self.Extension_Value = tk.StringVar()
144
+
145
+ self.Extension_Value.set(".MOV")
146
+
147
+
148
+
149
+ self.Text_Output_Path.grid(column=0, row=0, sticky='w')
150
+
151
+ self.Field_Output_Path.grid(column=1, row=0, sticky='nsew')
152
+
153
+ self.Button_Output_Path.grid(column=2, row=0, sticky='nsew')
154
+
155
+ self.Text_Output_Name.grid(column=0, row=1, sticky='w')
156
+
157
+ self.Field_Output_Name.grid(column=1, row=1, sticky='nsew')
158
+
159
+
160
+
161
+ FrameOne = CreateFrameOne(win, text="Input Settings", fg="white", bg="#52514F")
162
+
163
+ FrameTwo = CreateFrameOne(win, text="Input Settings", fg="white", bg="#52514F")
164
+
165
+ FrameOne.grid(column=2, row=2, padx='20', pady='10', sticky='nsew')
166
+
167
+ FrameTwo.grid(column=2, row=3, padx='20', pady='10', sticky='nsew')
168
+
169
+ ```
170
+
171
+
172
+
173
+
174
+
175
+ # ②
176
+
177
+ それよりかは、目的がスッキリ見やすくさせたいといった場合に関しては
178
+
179
+ 「ウィジェットの生成→定義→配置」と同じ動作を何度も繰り返すものであり
180
+
181
+ それならば、逆に考えれば同じ動作を繰り返せるという事ならばfor文を使用して簡略化できるという考えでした。
182
+
183
+ ```python
184
+
185
+ # for文を使用しない場合
186
+
187
+ FrameOne = tk.LabelFrame(win, text="Input Settings", fg="white", bg="#52514F", padx="5", pady="5") #Input Settings Frame
188
+
189
+ FrameTwo = tk.LabelFrame(win, text="Output Settings", fg="white", bg="#52514F", padx="5", pady="5") #Output Settings Frame
190
+
191
+ FrameThree = tk.LabelFrame(win, text="Button", fg="white", bg="#52514F", pady="5", padx="5") #Buttoun Settings Frame
192
+
193
+ FrameFour = tk.LabelFrame(win, text="Progress", fg="white", bg="#52514F", padx="5", pady="5") #Progress Settings Frame
194
+
195
+ FrameFive = tk.LabelFrame(win, text="Preview", fg="white", bg="#52514F", padx="5", pady="5") #Preview Window Settings Frame
196
+
197
+
198
+
199
+ FrameOne.grid(column=2, row=2, padx='20', pady='10', sticky='nsew')
200
+
201
+ FrameTwo.grid(column=2, row=3, padx='20', pady='10', sticky='nsew')
202
+
203
+ FrameThree.grid(column=3, row=2, rowspan=2, padx='20', pady='10', sticky='nsew')
204
+
205
+ FrameFour.grid(column=2, columnspan=2, row=4, padx='20', pady='10', sticky='nsew')
206
+
207
+ FrameFive.grid(column=2, columnspan=2, row=1, padx='20', pady='10', sticky='nsew')
208
+
209
+
210
+
211
+ # for文を使用した場合
212
+
213
+ Frame_info = {'Input Settings':[2, 2, 1, 1, 20, 10, 'nsew'],
214
+
215
+ 'Output Settings':[3, 2, 1, 1, 20, 10, 'nsew'],
216
+
217
+ 'Button':[2, 3, 2, 1, 20, 10, 'nsew'],
218
+
219
+ 'Progress':[4, 2, 1, 2, 20, 10, 'nsew'],
220
+
221
+ 'Preview':[1, 2, 1, 2, 20, 10, 'nsew']}
222
+
223
+ Frames = []
224
+
225
+ for fname, info in Frame_info.items():
226
+
227
+ tmp = tk.LabelFrame(win, text=fname, fg='white', bg=main_bg, padx=5, pady=5)
228
+
229
+ tmp.grid(row=info[0], column=info[1], rowspan=info[2], columnspan=info[3], padx=info[4], pady=info[5], sticky=info[6])
230
+
231
+ Frames.append(tmp)
232
+
233
+ ```
234
+
235
+ また「簡読化したい」というだけの目的であればという事を前提にfor文をおすすめしておりましたが
236
+
237
+ 何も必ずしもfor文を使うべきであるというものでもなく、また「どうしてもclass化がしたいんだ」という事であれば完全にお門違いな回答を差し上げてしまっておりますのでその場合には申し訳御座いません。
238
+
239
+ その場合には①のコードをご参考下さい。
240
+
241
+ いずれも見やすいか見やすくないかについては、ご自身が使用するだけのものであるか他者にもコードを共有するのかで変わってくるものである為ご自身にあった方法でコーディングしていく事をおすすめします。

2

修正

2020/09/14 12:06

投稿

nto
nto

スコア1438

test CHANGED
@@ -44,7 +44,9 @@
44
44
 
45
45
 
46
46
 
47
+ また、クラス化とは違いますがスッキリさせたいという事であれば
48
+
47
- また、ウィジェット自体をリストに格納し、for文で設定と配置していくといった手法もあります。
49
+ ウィジェット自体をリストに格納し、for文で設定と配置していくといった手法もあります。
48
50
 
49
51
  個人的にこのやり方はスッキリして好きです。
50
52
 

1

微修正

2020/09/14 07:58

投稿

nto
nto

スコア1438

test CHANGED
@@ -52,25 +52,25 @@
52
52
 
53
53
  # row, column, columnspan, padx, pady, stickyの順
54
54
 
55
- # (columnspanのデフォルト値は1の為、指定なしの場合は1を指定)
55
+ # (rowspan,columnspanのデフォルト値は1の為、指定なしの場合は1を指定)
56
56
 
57
- Frame_info = {'Input Settings':[2, 2, 1, 20, 10, 'nsew'],
57
+ Frame_info = {'Input Settings':[2, 2, 1, 1, 20, 10, 'nsew'],
58
58
 
59
- 'Output Settings':[3, 2, 1, 20, 10, 'nsew'],
59
+ 'Output Settings':[3, 2, 1, 1, 20, 10, 'nsew'],
60
60
 
61
- 'Button':[2, 3, 2, 20, 10, 'nsew'],
61
+ 'Button':[2, 3, 2, 1, 20, 10, 'nsew'],
62
62
 
63
- 'Progress':[4, 2, 2, 20, 10, 'nsew'],
63
+ 'Progress':[4, 2, 1, 2, 20, 10, 'nsew'],
64
64
 
65
- 'Preview':[1, 2, 2, 20, 10, 'nsew']}
65
+ 'Preview':[1, 2, 1, 2, 20, 10, 'nsew']}
66
66
 
67
67
  Frames = []
68
68
 
69
69
  for fname, info in Frame_info.items():
70
70
 
71
- tmp = tk.LabelFrame(win, text=fname, fg='white', bg='#52514F')
71
+ tmp = tk.LabelFrame(win, text=fname, fg='white', bg='#52514F', padx=5, pady=5)
72
72
 
73
- tmp.grid(row=info[0], column=info[1], columnspan=info[2], padx=info[3], pady=info[4], sticky=info[5])
73
+ tmp.grid(row=info[0], column=info[1], rowspan=info[2], columnspan=info[3], padx=info[4], pady=info[5], sticky=info[6])
74
74
 
75
75
  Frames.append(tmp)
76
76