フレーム内のウィジェットを均等に配置したい
独学でGUIの勉強をしています。
図のように、大きなラベルフレームの中にフレーム1、2を入れ、それぞれの中にLabelとEntryをgridしているのですが、デザインが思ったようになりません。
解消したい問題点は2点です。
1.フレーム1内にgridした同じ行内のEntryウィジェットを、フレーム横幅に対して均等な長さで配置したい
2.フレーム1の下により横幅の大きいフレーム2を配置しており、フレーム1自体の横幅はフレーム2に合わせて拡張されるが、フレーム1内にgridしたウィジェットの横幅は元のままになっている(padx=5で右端まで伸びているはずのEntry3が、拡張できていない)
解決法に心当たりのある方、ご回答よろしくお願いします。
該当のソースコード
python
1import tkinter as tk 2from tkinter import ttk 3import tkinter.font as font 4from tkinter.scrolledtext import ScrolledText 5 6#tk 7root = tk.Tk() 8root.focus_force() 9root.resizable(False, False) 10root.title("APP") 11 12 13# 画面ぼやけ対策 14import ctypes 15try: 16 ctypes.windll.shcore.SetProcessDpiAwareness(True) 17except: 18 pass 19 20# ============================================================================= 21# 事前準備 22pad = {"padx":5, "pady":5} 23we = tk.W + tk.E 24fon = font.Font(root, size=10) 25 26LFrameStyle = ttk.Style() 27LFrameStyle.theme_use("default") 28LFrameStyle.configure("Dict.TLabelframe", background="gray94") 29LFrameStyle.configure("Dict.TLabelframe.Label", font=("", "12"), background="gray94", foreground="black", relief="ridge") 30 31 32# フレーム 33fra_Label = ttk.LabelFrame(root, labelanchor="nw", text="Label Frame", style="Dict.TLabelframe") 34 35fra1 = tk.Frame(fra_Label, cnf=pad, bg="IndianRed1") 36fra2 = tk.Frame(fra_Label, cnf=pad, bg="steelblue") 37 38# ============================================================================= 39# フレーム① 40lbl1 = ttk.Label(fra1, background="IndianRed1", text="Label 1", font=fon) 41lbl1.grid(row=0, column=0, cnf=pad, sticky=we) 42 43ent1 = tk.Entry(fra1, width=40, font=fon) 44ent1.insert(tk.END, "Entry 1") 45ent1.grid(row=1, column=0, cnf=pad, sticky=we) 46 47lbl2 = ttk.Label(fra1, background="IndianRed1", text="Label 2", font=fon) 48lbl2.grid(row=2, column=0, cnf=pad, sticky=we) 49ent2_1 = tk.Entry(fra1, font=fon) 50ent2_1.insert(tk.END, "Entry 2") 51ent2_1.grid(row=3, column=0, cnf=pad, sticky=we) 52 53ent2_2 = tk.Entry(fra1, font=fon) 54ent2_2.grid(row=3, column=1, cnf=pad, sticky=we) 55 56lbl3 = ttk.Label(fra1, background="IndianRed1", text="Label 3", font=fon) 57lbl2.grid(row=4, column=0, cnf=pad, sticky=we) 58 59ent3 = ScrolledText(fra1, height=5, font=fon) 60ent3.insert(tk.END, "Entry 3") 61ent3.grid(row=5, columnspan=2, cnf=pad, sticky=we) 62 63 64# ================================================================================= 65# フレーム② 66lbl4 = ttk.Label(fra2, background="steelblue", text="Label 4", font=fon) 67lbl4.grid(row=0, column=0, cnf=pad, sticky=we) 68 69ent4_1 = tk.Entry(fra2, font=fon) 70ent4_1.insert(tk.END, "Entry 4") 71ent4_1.grid(row=1, column=0, cnf=pad, sticky=we) 72 73ent4_2 = tk.Entry(fra2, font=fon) 74ent4_2.grid(row=1, column=1, cnf=pad, sticky=we) 75 76ent4_3 = tk.Entry(fra2, font=fon) 77ent4_3.grid(row=1, column=2, cnf=pad, sticky=we) 78 79ent4_4 = tk.Entry(fra2, font=fon) 80ent4_4.grid(row=1, column=3, cnf=pad, sticky=we) 81 82 83 84# ============================================================================= 85# フレーム綴じる 86 87fra1.columnconfigure([1, 3, 5], weight=1) 88fra1.rowconfigure([0, 1, 2], weight=1) 89fra1.pack(expand=True, fill="x", padx=10) 90 91fra2.columnconfigure([1, 3, 5], weight=1) 92fra2.rowconfigure([0, 1, 2], weight=1) 93fra2.pack(expand=False, fill="x", padx=10) 94 95fra_Label.columnconfigure([1, 3, 5], weight=1) 96fra_Label.rowconfigure([0, 1, 2], weight=1) 97fra_Label.pack(expand=False, fill=tk.BOTH, padx=10, pady=10) 98 99 100# ============================================================================= 101root.mainloop() 102
補足情報(FW/ツールのバージョンなど)
Windows10
Python 3.8.3
tk 8.6.10
回答1件
あなたの回答
tips
プレビュー