我在笔记本选项卡中写标签和条目,但是它不是垂直排列的。相反,它是水平的。
我尝试使用网格,但是由于以下原因而无法使用
:_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 | ...
答案 0 :(得分:2)
如错误所示,您不能将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循环来创建标签/条目对。它可以使您免于重复的代码:
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
的值,则可以在循环期间将它们附加到列表中。