如何在标签内修复标签和条目

时间:2019-06-19 07:22:27

标签: python-3.x tkinter

我在笔记本选项卡中写标签和条目,但是它不是垂直排列的。相反,它是水平的。

我尝试使用网格,但是由于以下原因而无法使用

_tkinter.TclError:无法在已经由包管理从站的。!notebook。!框架内使用几何管理器网格

from tkinter import *
from tkinter import ttk

class View:

    def __init__(self, root):

        # Define software title
        root.title("Plotting Management System")

        # Define software's width and height
        root.geometry("800x600")

        # Define label
        L0 = Label(root, text="Plotting Management System", font="Helvetica 24 bold")
        L0.grid(row=0)
        L0.pack(anchor="nw")

        tab_parent = ttk.Notebook(root)

        tab0 = ttk.Frame(tab_parent)

        tree0 = ttk.Treeview(tab0)
        tree0["columns"] = ("one", "two", "three", "four")
        tree0.heading("#0", text="Kode Dosen", anchor="w")
        tree0.column("#0", minwidth=0, width=100, stretch=NO)
        tree0.heading("one", text="Nama Dosen", anchor="w")
        tree0.column("one", minwidth=0, width=300, stretch=NO)
        tree0.heading("two", text="JFA", anchor="w")
        tree0.column("two", minwidth=0, width=100, stretch=NO)
        tree0.heading("three", text="Prodi", anchor="w")
        tree0.column("three", minwidth=0, width=80, stretch=NO)
        tree0.heading("four", text="KK", anchor="w")
        tree0.column("four", minwidth=0, width=80, stretch=NO)
        tree0.pack(anchor="w")

        L1 = Label(tab0, text="Kode Dosen")
        L1.pack(side="left", anchor="w")
        E1 = Entry(tab0, width=50)
        E1.pack(side="left")

        L2 = Label(tab0, text="Nama Dosen")
        L2.pack(side="left", anchor="w")
        E2 = Entry(tab0, width=50)
        E2.pack(side="left")

        L3 = Label(tab0, text="JFA")
        L3.pack(side="left", anchor="w")
        E3 = Entry(tab0, width=50)
        E3.pack(side="left")

        L4 = Label(tab0, text="Prodi")
        L4.pack(side="left", anchor="w")
        E4 = Entry(tab0, width=50)
        E4.pack(side="left")

        L5 = Label(tab0, text="KK")
        L5.pack(side="left", anchor="w")
        E5 = Entry(tab0, width=50)
        E5.pack(side="left")

        tab_parent.add(tab0, text="Data Dosen")
        tab_parent.pack(fill="both")

if __name__ == "__main__":
    root = Tk()
    gui = View(root)
    root.mainloop()

我希望它们垂直排列,而不是水平排列。

想要的结果:

标签1 |条目1

标签2 |条目2

标签3 |条目3

实际结果:

标签1 |条目1 |标签2 |条目2 | ...

1 个答案:

答案 0 :(得分:2)

如错误所示,您不能将gridpack与同一父级混合使用。但是您可以使用pack添加另一个框架,并使用Label作为框架内的几何管理器来使用Entrygrid小部件。

class View:
    def __init__(self, root):
        ...
        label_frame = ttk.Frame(tab0)
        label_frame.pack(anchor="w")

        L1 = Label(label_frame, text="Kode Dosen")
        L1.grid(row=0,column=0)
        E1 = Entry(label_frame, width=50)
        E1.grid(row=0,column=1)
        ...

我也建议使用for循环来创建标签/条目对。它可以使您免于重复的代码:

for num, i in enumerate(("Kode Dosen","Nama Dosen","JFA","Prodi","KK")):
    a = Label(label_frame, text=i)
    a.grid(row=num, column=0)
    b = Entry(label_frame, width=50)
    b.grid(row=num,column=1)

如果您需要Entry的值,则可以在循环期间将它们附加到列表中。