flatch3142
@flatch3142

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Tkinterにてウィジェットが指定通り配置されない

解決したいこと

 Python Tkinter でパソコン上で動作するちょっとしたツールをつくっています。現在、下準備としてGUIを作成中です。そのGUIに使用するウィジェットは、「フレーム」「ラベル」「エントリーフィールド」「ボタン」「ラジオボタン」「プログレスバー」「テキストボックス」の7種類で、ウィジェット配置方法は grid メソッドを採用しています。

 今回解決したい問題は、指定通りに「フレーム」が配置されないことです。以下の添付画像[1]のような枠1と枠2の高さが、枠3の高さと等しくなる配置へ実装を試みましたが画像[2]のように枠1と2の間に空間ができてうまくいきません。
解決方法を教えて下さい。

発生している問題・エラー

画像[1] :完成図

各ウィジェットの配置まとめ:クリック
スクリーンショット 2025-03-20 135635.png

画像[2] : 実行後

スクリーンショット 2025-03-20 135501.png

該当するソースコード

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

1Answer

Comments

  1. @flatch3142

    Questioner

    回答ありがとうございます!
    frame3にて rowspan=2 としたところ問題の空間がなくなり、おかげさまで問題が解決しました。ログの高さも調整して望む形にすることができました。
    貴重なお時間を割いて教えていただきましたこと、心より感謝申し上げます。今後もさらに学習を重ねていきたいと思います。ありがとうございました。

Your answer might help someone💌