回答編集履歴
6
typo 修正 tow -> row
answer
CHANGED
@@ -155,7 +155,7 @@
|
|
155
155
|
view.separator.grid(row=row, column=col(), sticky=tk.NSEW, **kw)
|
156
156
|
|
157
157
|
@addrow
|
158
|
-
def
|
158
|
+
def row_message(row, col, **kw):
|
159
159
|
view.message.grid(row=row, column=col(), columnspan=maxcolumn, sticky=tk.NSEW, **kw)
|
160
160
|
parent.grid_rowconfigure(row, weight=True)
|
161
161
|
|
5
init_view_layout関数: columnの値を動的に生成。グリッド内のマジックナンバー排除
answer
CHANGED
@@ -118,53 +118,56 @@
|
|
118
118
|
# 後でまとめて、順番に行番号 `row` を与えて呼び出します。
|
119
119
|
|
120
120
|
# これにより、行の入れ替えや追加が容易に管理できるようになります。
|
121
|
-
# 但し、列の追加には弱いです。
|
122
121
|
|
122
|
+
from itertools import count
|
123
|
+
from functools import partial
|
124
|
+
|
123
125
|
rows = []
|
124
126
|
addrow = rows.append
|
125
127
|
maxcolumn = 6
|
128
|
+
right = lambda column: maxcolumn-column-1
|
126
129
|
nopad = {"padx":0, "pady": 0}
|
127
130
|
|
128
131
|
def _finish_layout():
|
129
132
|
for row, func in enumerate(rows):
|
130
|
-
func(row)
|
133
|
+
func(row, partial(next, count()), **nopad)
|
131
134
|
|
132
135
|
parent = view.parent
|
133
136
|
parent.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)
|
134
137
|
parent.grid_columnconfigure(2, weight=True)
|
135
138
|
|
136
139
|
@addrow
|
137
|
-
def row_header(row):
|
140
|
+
def row_header(row, col, **kw):
|
138
|
-
view.labelA.grid(row=row, column=
|
141
|
+
view.labelA.grid(row=row, column=col(), **kw)
|
139
|
-
view.labelB.grid(row=row, column=
|
142
|
+
view.labelB.grid(row=row, column=col(), **kw)
|
140
143
|
|
141
144
|
@addrow
|
142
|
-
def row_scrolledtext(row):
|
145
|
+
def row_scrolledtext(row, col, **kw):
|
143
|
-
view.text.grid(row=row, column=
|
146
|
+
view.text.grid(row=row, column=col(), columnspan=maxcolumn, sticky=tk.NSEW, **kw)
|
144
147
|
parent.grid_rowconfigure(row, weight=True)
|
145
148
|
|
146
149
|
@addrow
|
147
|
-
def row_center_button(row):
|
150
|
+
def row_center_button(row, col, **kw):
|
148
|
-
view.buttonA.grid(row=row, column=
|
151
|
+
view.buttonA.grid(row=row, column=col(), columnspan=maxcolumn)
|
149
152
|
|
150
153
|
@addrow
|
151
|
-
def row_blank_separator(row):
|
154
|
+
def row_blank_separator(row, col, **kw):
|
152
|
-
view.separator.grid(row=row, column=
|
155
|
+
view.separator.grid(row=row, column=col(), sticky=tk.NSEW, **kw)
|
153
156
|
|
154
157
|
@addrow
|
155
|
-
def
|
158
|
+
def tow_message(row, col, **kw):
|
156
|
-
view.message.grid(row=row, column=
|
159
|
+
view.message.grid(row=row, column=col(), columnspan=maxcolumn, sticky=tk.NSEW, **kw)
|
157
160
|
parent.grid_rowconfigure(row, weight=True)
|
158
161
|
|
159
162
|
@addrow
|
160
|
-
def row_bottom_label(row):
|
163
|
+
def row_bottom_label(row, col, **kw):
|
161
|
-
view.buttonB.grid(row=row, column=
|
164
|
+
view.buttonB.grid(row=row, column=col(), sticky=tk.NSEW, **kw)
|
162
|
-
view.labelC.grid(row=row, sticky=tk.NSEW,
|
165
|
+
view.labelC.grid(row=row, column=col(), sticky=tk.NSEW, **kw)
|
163
166
|
|
164
167
|
@addrow
|
165
|
-
def row_footer(row):
|
168
|
+
def row_footer(row, col, **kw):
|
169
|
+
view.buttonD.grid(row=row, column=right(col()), sticky=tk.NSEW, **kw)
|
166
|
-
view.buttonC.grid(row=row, column=
|
170
|
+
view.buttonC.grid(row=row, column=right(col()), sticky=tk.NSEW, **kw)
|
167
|
-
view.buttonD.grid(row=row, column=maxcolumn-1, sticky=tk.NSEW, **nopad)
|
168
171
|
|
169
172
|
_finish_layout()
|
170
173
|
|
4
コードの実行に支障はありませんが、gridでcolumn=0 明示してなかったのを2か所訂正
answer
CHANGED
@@ -145,11 +145,11 @@
|
|
145
145
|
|
146
146
|
@addrow
|
147
147
|
def row_center_button(row):
|
148
|
-
view.buttonA.grid(row=row, columnspan=maxcolumn)
|
148
|
+
view.buttonA.grid(row=row, column=0, columnspan=maxcolumn)
|
149
149
|
|
150
150
|
@addrow
|
151
151
|
def row_blank_separator(row):
|
152
|
-
view.separator.grid(row=row, sticky=tk.NSEW, **nopad)
|
152
|
+
view.separator.grid(row=row, column=0, sticky=tk.NSEW, **nopad)
|
153
153
|
|
154
154
|
@addrow
|
155
155
|
def row_message(row):
|
3
packでの例を追記
answer
CHANGED
@@ -185,4 +185,49 @@
|
|
185
185
|
|
186
186
|
`init_view_style(view)` の行をコメントアウトすると、スタイル適応なしで実行されます。
|
187
187
|
|
188
|
-

|
188
|
+

|
189
|
+
|
190
|
+
----
|
191
|
+
追記: packでの実装例
|
192
|
+
|
193
|
+
最小限のコードになりますが、簡単な方法では、
|
194
|
+
「横に並べる」部分だけを別フレームに切り出し、
|
195
|
+
`side="left"` を指定して横並びにします。
|
196
|
+
|
197
|
+
```python
|
198
|
+
import tkinter as tk
|
199
|
+
from tkinter import ttk
|
200
|
+
from tkinter.scrolledtext import ScrolledText
|
201
|
+
|
202
|
+
|
203
|
+
def main():
|
204
|
+
root = tk.Tk()
|
205
|
+
|
206
|
+
frameA = ttk.Frame(root)
|
207
|
+
frameA.pack(fill=tk.BOTH)
|
208
|
+
ttk.Label(frameA, text="Label", width=10).pack(side=tk.LEFT)
|
209
|
+
ttk.Label(frameA, text="ListBox?", width=10).pack(side=tk.LEFT)
|
210
|
+
|
211
|
+
text = ScrolledText(root, height=10)
|
212
|
+
text.pack(fill=tk.BOTH, expand=1)
|
213
|
+
text.insert(tk.END, "ScrolledText")
|
214
|
+
|
215
|
+
ttk.Button(root, text="Button").pack()
|
216
|
+
ttk.Label(root).pack()
|
217
|
+
tk.Message(root, text="Message", width=200, bg="black", fg="white").pack(fill=tk.BOTH, expand=1)
|
218
|
+
|
219
|
+
frameB = ttk.Frame(root)
|
220
|
+
frameB.pack(fill=tk.BOTH)
|
221
|
+
ttk.Button(frameB, text="Button", width=10).pack(side=tk.LEFT)
|
222
|
+
ttk.Label(frameB, text="Label", width=10).pack(side=tk.LEFT)
|
223
|
+
|
224
|
+
ttk.Button(root, text="Quit", command=root.destroy).pack(side=tk.RIGHT)
|
225
|
+
ttk.Button(root, text="Button").pack(side=tk.RIGHT)
|
226
|
+
|
227
|
+
root.mainloop()
|
228
|
+
|
229
|
+
|
230
|
+
if __name__ == '__main__':
|
231
|
+
main()
|
232
|
+
|
233
|
+
```
|
2
typo修正。実行に影響はなし。
answer
CHANGED
@@ -152,7 +152,7 @@
|
|
152
152
|
view.separator.grid(row=row, sticky=tk.NSEW, **nopad)
|
153
153
|
|
154
154
|
@addrow
|
155
|
-
def
|
155
|
+
def row_message(row):
|
156
156
|
view.message.grid(row=row, column=0, columnspan=maxcolumn, sticky=tk.NSEW, **nopad)
|
157
157
|
parent.grid_rowconfigure(row, weight=True)
|
158
158
|
|
1
内部関数の関数名修正。create ではなかった。
answer
CHANGED
@@ -134,35 +134,35 @@
|
|
134
134
|
parent.grid_columnconfigure(2, weight=True)
|
135
135
|
|
136
136
|
@addrow
|
137
|
-
def
|
137
|
+
def row_header(row):
|
138
138
|
view.labelA.grid(row=row, column=0, **nopad)
|
139
139
|
view.labelB.grid(row=row, column=1, **nopad)
|
140
140
|
|
141
141
|
@addrow
|
142
|
-
def
|
142
|
+
def row_scrolledtext(row):
|
143
143
|
view.text.grid(row=row, column=0, columnspan=maxcolumn, sticky=tk.NSEW, **nopad)
|
144
144
|
parent.grid_rowconfigure(row, weight=True)
|
145
145
|
|
146
146
|
@addrow
|
147
|
-
def
|
147
|
+
def row_center_button(row):
|
148
148
|
view.buttonA.grid(row=row, columnspan=maxcolumn)
|
149
149
|
|
150
150
|
@addrow
|
151
|
-
def
|
151
|
+
def row_blank_separator(row):
|
152
152
|
view.separator.grid(row=row, sticky=tk.NSEW, **nopad)
|
153
153
|
|
154
154
|
@addrow
|
155
|
-
def
|
155
|
+
def tow_message(row):
|
156
156
|
view.message.grid(row=row, column=0, columnspan=maxcolumn, sticky=tk.NSEW, **nopad)
|
157
157
|
parent.grid_rowconfigure(row, weight=True)
|
158
158
|
|
159
159
|
@addrow
|
160
|
-
def
|
160
|
+
def row_bottom_label(row):
|
161
161
|
view.buttonB.grid(row=row, column=0, sticky=tk.NSEW, **nopad)
|
162
162
|
view.labelC.grid(row=row, sticky=tk.NSEW, column=1, **nopad)
|
163
163
|
|
164
164
|
@addrow
|
165
|
-
def
|
165
|
+
def row_footer(row):
|
166
166
|
view.buttonC.grid(row=row, column=maxcolumn-2, sticky=tk.NSEW, **nopad)
|
167
167
|
view.buttonD.grid(row=row, column=maxcolumn-1, sticky=tk.NSEW, **nopad)
|
168
168
|
|