前提・実現したいこと
Pythonのtkinterを使ったGUIの勉強をしています。
grid()により以下のようにwidgetを全て左寄せで配置したいです。
1列目:①Lable、②Entry(短)、③Label
2列目:④Label、⑤Entry(長)
発生している問題・エラーメッセージ
下記ソースコードを実行すると③Labelが左寄せになってくれず(sticky=Wとしているのに)、②Entry(短)と⑤Entry(長)の差分のちょうど中間あたりに配置されてしまいます。
自分の頭の中では以下のようにrowとcolumnの関係をイメージして記述したつもりでした。
該当のソースコード
Python
1from tkinter import * 2from tkinter import ttk 3 4root = Tk() 5root.geometry("400x200") 6root.title("【画面】") 7 8num_lbl1 = ttk.Label(root, text="数字を入力", padding=(30,3,0,3)) 9num_lbl1.grid(row=0, column=0, sticky=W) 10 11num_entry = ttk.Entry(root, width=3) 12num_entry.grid(row=0, column=1, sticky=W) 13 14num_lbl2 = ttk.Label(root, text="※注意", foreground="red", padding=(0,3)) 15num_lbl2.grid(row=0, column=2, sticky=W) 16 17name_lbl = ttk.Label(root, text="文字を入力", padding=(30,3,0,3)) 18name_lbl.grid(row=1, column=0, sticky=W) 19 20name_entry = ttk.Entry(root, width=15) 21name_entry.grid(row=1, column=1, columnspan=2, sticky=W)
試したこと
2列目に関する記述をコメントアウトして1列目のみを表示させた場合は、希望通り①②③が全て左寄せになってくれるため、⑤Entry(長)のcolumnspan=2の影響を受けているのだろうと思うのですが、どういう法則によりこうなってしまうのかが分かりませんでした。
補足情報(FW/ツールのバージョンなど)
・Python3.8.1
・IDLEで実行
※配置方法にgridを採用している理由
上記コードには含めていませんが、ラジオボタンの選択を条件にgrid_remove()とgrid()を使ってこの2行を表示/非表示させる必要があり、widgetの位置を覚えさせての表示/非表示の実現はgridしかないという情報を見たため、packやplaceではなくgridを採用しています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/29 04:19 編集