Как исправить ярлыки и записи внутри вкладки - PullRequest
1 голос
/ 19 июня 2019

Я пишу метки и записи на вкладке блокнота, но они не располагаются вертикально.Вместо этого он горизонтален.

Я пытался использовать сетку, но она не работает, потому что:

_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 Ответ

2 голосов
/ 19 июня 2019

Как показывает ошибка, вы не можете смешивать grid и pack с одним и тем же родителем. Но вы можете добавить другой фрейм, используя pack, и ваши виджеты Label и Entry будут использовать grid в качестве менеджера геометрии внутри этого фрейма.

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 для создания ваших пар Label / Entry. Это может спасти вас от повторяющихся кодов:

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, вы можете добавить их в список во время цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...