Pythonの「tkinter」でラベルとテキストを横に並べる方法を解説しています。
以下のようなフォームです。
コーディングサンプル
コーディングは以下になります。
import tkinter as tk
root = tk.Tk()
root.title("ラベルとテキストを並べる")
root.geometry("300x100")
#1行目 入力1
frame1 = tk.Frame(root)
frame1.pack(anchor=tk.W)
lbl1 = tk.Label(frame1,text="入力1:")
lbl1.pack(side=tk.LEFT)
ent1 = tk.Entry(frame1)
ent1.pack(side=tk.LEFT)
#2行目 入力2
frame2 = tk.Frame(root)
frame2.pack(anchor=tk.W)
lbl2 = tk.Label(frame2,text="入力2:")
lbl2.pack(side=tk.LEFT)
ent2 = tk.Entry(frame2)
ent2.pack(side=tk.LEFT)
tk.mainloop()
解説
画面にフレームを配置して、そのフレーム内にラベルとテキストボックスを配置しています。
配置にはpackメソッドを使用しています。
① フレームの配置はside=tk.TOP(既定値なので指定していません)で上から配置します。
#1行目 入力1
frame1 = tk.Frame(root)
frame1.pack(anchor=tk.W)
② ラベルとテキストボックスはフレーム内に、side=tk.LEFTで左寄せで配置しています。
lbl1 = tk.Label(frame1,text="入力1:")
lbl1.pack(side=tk.LEFT)
ent1 = tk.Entry(frame1)
ent1.pack(side=tk.LEFT)
③ 2行目も同じようにフレーム内にラベル、テキストボックスを配置します。
#2行目 入力2
frame2 = tk.Frame(root)
frame2.pack(anchor=tk.W)
lbl2 = tk.Label(frame2,text="入力1:")
lbl2.pack(side=tk.LEFT)
ent2 = tk.Entry(frame2)
ent2.pack(side=tk.LEFT)
失敗の事例
フレームを使わないと思うように配置できませんでした、以下はその失敗例です。
side=tk.LEFTで並べようとした場合
フレームを使わないでside=tk.LEFTを指定すると、全てのウィジェットが横に並びます。
import tkinter as tk
root = tk.Tk()
root.title("ラベルとテキストを並べる")
root.geometry("300x100")
lbl1 = tk.Label(text="入力1:")
lbl1.pack(side=tk.LEFT)
ent1 = tk.Entry()
ent1.pack(side=tk.LEFT)
lbl2 = tk.Label(text="入力2:")
lbl2.pack(side=tk.LEFT)
ent2 = tk.Entry()
ent2.pack(side=tk.LEFT)
tk.mainloop()
表示された画面
※横にはみ出してしまいました。
side=tk.LEFTで並べようとした場合
フレームを使わないでside=tk.TOPを指定すると、全てのウィジェットが縦に並びます。
import tkinter as tk
root = tk.Tk()
root.title("ラベルとテキストを並べる")
root.geometry("300x100")
lbl1 = tk.Label(text="入力1:")
lbl1.pack(side=tk.TOP)
ent1 = tk.Entry()
ent1.pack(side=tk.TOP)
lbl2 = tk.Label(text="入力2:")
lbl2.pack(side=tk.TOP)
ent2 = tk.Entry()
ent2.pack(side=tk.TOP)
tk.mainloop()
表示された画面
まとめ
tkinterでラベルとテキストボックスを横に並べるには、セットでフレーム内に配置する必要があります。
packメソッドでは以下のように配置します。
- フレーム side=tk.TOP
- ラベルとテキストボックス side=tk.LEFT
ラベルとテキストボックスだけでは思うように配置できないので気をつけましょう。