Tkinterにてウィジェットが指定通り配置されない
解決したいこと
Python Tkinter でパソコン上で動作するちょっとしたツールをつくっています。現在、下準備としてGUIを作成中です。そのGUIに使用するウィジェットは、「フレーム」「ラベル」「エントリーフィールド」「ボタン」「ラジオボタン」「プログレスバー」「テキストボックス」の7種類で、ウィジェット配置方法は grid メソッドを採用しています。
今回解決したい問題は、指定通りに「フレーム」が配置されないことです。以下の添付画像[1]のような枠1と枠2の高さが、枠3の高さと等しくなる配置へ実装を試みましたが画像[2]のように枠1と2の間に空間ができてうまくいきません。
解決方法を教えて下さい。
発生している問題・エラー
画像[1] :完成図
各ウィジェットの配置まとめ:クリック
画像[2] : 実行後
該当するソースコード
import tkinter as tk
from tkinter import ttk
from tkinter import *
root = tk.Tk()
root.title("GUI 練習")
root.geometry('750x350')
# 枠組み
frame1 = tk.LabelFrame(root, text='枠1',bd=2, relief=tk.GROOVE)
frame1.grid(row=1, column=0, padx=10, pady=5, sticky= tk.NW)
frame2 = tk.LabelFrame(root, text='枠2',bd=2, relief=tk.GROOVE)
frame2.grid(row=2, column=0, padx=10, pady=5, sticky=tk.N)
frame3 = tk.LabelFrame(root, text='枠3',bd=2, relief=tk.GROOVE)
frame3.grid(row=1, column=1, padx=10, pady=5, sticky=tk.NE)
# ラジオボタン
selected_radio = tk.StringVar()
Radio1 = tk.Radiobutton(frame1, text='1', value='1', variable=selected_radio)
Radio1.grid(row=6, column=0, padx=10, pady=5)
Radio2 = tk.Radiobutton(frame2, text='2', value='2', variable=selected_radio)
Radio2.grid(row=8, column=0, padx=10, pady=5)
# 【枠1】ラベル エントリーフィールド ボタン
Label1 = tk.Label(frame1, text='ラベル1')
Label1.grid(row=2, column=0, padx=5, pady=5)
Label1_Entry = tk.Entry(frame1, width=50)
Label1_Entry.grid(row=2, column=1, columnspan=3, padx=10, pady=5)
Label2 = tk.Label(frame1, text='ラベル2')
Label2.grid(row=3, column=0, padx=5, pady=5)
Label2_Entry = tk.Entry(frame1, width=50)
Label2_Entry.grid(row=3, column=1, columnspan=3, padx=10, pady=5)
Label3 = tk.Label(frame1, text='ラベル3')
Label3.grid(row=4, column=0, padx=5, pady=5)
Label3_Entry = tk.Entry(frame1, width=50)
Label3_Entry.grid(row=4, column=1, columnspan=3, padx=10, pady=5)
Label4 = tk.Label(frame1, text='ラベル4')
Label4.grid(row=5, column=0, padx=5, pady=5)
Label4_Entry = tk.Entry(frame1, width=50)
Label4_Entry.grid(row=5, column=1, columnspan=3, padx=10, pady=5)
Button1_1 = tk.Button(frame1, text='button1_1')
Button1_1.grid(row=6, column=1, padx=10, pady=5)
Button1_2 = tk.Button(frame1, text='button1_2')
Button1_2.grid(row=6, column=2, padx=10, pady=5)
Button1_3 = tk.Button(frame1, text='button1_3')
Button1_3.grid(row=6, column=3, padx=10, pady=5)
# 【枠2】ラベル エントリーフィールド ボタン
Label5 = tk.Label(frame2, text='ラベル5')
Label5.grid(row=7, column=0, padx=5, pady=5)
Label5_Entry = tk.Entry(frame2, width=50)
Label5_Entry.grid(row=7, column=1, columnspan=3, padx=10, pady=5)
Button2_1 = tk.Button(frame2, text='button2_1')
Button2_1.grid(row=8, column=1, padx=10, pady=5)
Button2_2 = tk.Button(frame2, text='button2_2')
Button2_2.grid(row=8, column=2, padx=10, pady=5)
Button2_3 = tk.Button(frame2, text='button2_3')
Button2_3.grid(row=8, column=3, padx=10, pady=5)
# 【枠3】プログレスバー
Progress1 = ttk.Progressbar(frame3,orient='horizontal', length=300, mode='determinate')
Progress1.grid(row=2, column=4, columnspan=6, padx=10, pady=5)
Progress2 = ttk.Progressbar(frame3, orient='horizontal', length=300, mode='determinate')
Progress2.grid(row=3, column=4, columnspan=6, padx=10, pady=5)
# 【枠3】 ログ
log_text = Text(frame3, wrap='word', width=42, height=10)
log_text.grid(row=4, rowspan=6, column=4, columnspan=6, padx=10, pady=10,)
# 縦横の伸縮
frame3.grid_rowconfigure(4, weight=1)
frame3.grid_columnconfigure(4, weight=1)
root.mainloop()
各ウィジェット配置位置
完成図:クリック
●ラベル
ラベル1: row = 2, column = 0
ラベル2: row = 3, column = 0
ラベル3: row = 4, column = 0
ラベル4: row = 5, column = 0
●エントリーフィールド
L1: row = 2, column = 1, columnspan = 3
L2: row = 3, column = 1, columnspan = 3
L3: row = 4, column = 1, columnspan = 3
L4: row = 5, column = 1, columnspan = 3
●ボタン 1
1: row = 6, column = 1
2: row = 6, column = 2
3: row = 6, column = 3
●ボタン2
1: row = 8, column = 1
2: row = 8, column = 2
3: row = 8, column = 3
●ラジオボタン
RD1: row = 6, column = 0
RD2: row = 8, column = 0
●プログレスバー
1: row = 2, column = 4, columnspan = 6
2: row = 3, column = 4, columnspan = 6
●ログ
row = 4, column = 4, columnspan = 6
自分で試したこと
私が行ったデバッグで確認済みのことは以下の通りです。
・log_text の height を大きくすると比例して枠1と枠2の間の空間も大きくなること。
・#【枠3】ログ のコードを削除すると枠1と枠2の間の空間はなくなること。
・frame2 frame3のstickyの引数を変更しても解決には至らなかったこと。
0