这只是一个简单的问题,但是当你使用粘性时,标签是否应该留在它的嵌套框架内?在我的代码中,它只保留在父框架中。如果这是正常的,你有解决方案吗?
我试过看文档,但我找不到任何可以帮助的东西。
from tkinter import *
from tkinter import ttk
root = Tk()
root.title("Tk test")
root.geometry("800x800")
frame_1 = ttk.Frame(root, relief="sunken", height="400", width="400").grid(row=0, column=0, rowspan=1, columnspan=1)
frame_2 = ttk.Frame(frame_1, relief="sunken", height="200", width="200").grid(row=0, column=0, rowspan=1, columnspan=1)
label_1 = ttk.Label(frame_2, text="Text").grid(row=0, column=0, sticky="N, E")
root.mainloop()
预期结果:标签位于其框架内,该框架嵌套在父框架内。实际结果:它只保留在父框架内
.grid(...)
函数返回None
。因此,当你这样做
frame_1 = ttk.Frame(root, relief="sunken", height="400", width="400").grid(row=0, column=0, rowspan=1, columnspan=1)
你把None
分配给frame_1
。 frame_2
和label_1
也是如此。
因为frame_1 == None
,调用ttk.Frame(frame_1, ...)
实际上与ttk.Frame(None, ...)
相同。因此,您没有传递主服务器,主服务器默认将根窗口作为主服务器。同样,label_1
的创建也是如此。
修复方法是将窗口小部件的创建和放置拆分为两个单独的行:
from tkinter import *
from tkinter import ttk
root = Tk()
root.title("Tk test")
root.geometry("800x800")
frame_1 = ttk.Frame(root, relief="sunken", height="400", width="400")
frame_1.grid(row=0, column=0, rowspan=1, columnspan=1)
frame_2 = ttk.Frame(frame_1, relief="sunken", height="200", width="200")
frame_2.grid(row=0, column=0, rowspan=1, columnspan=1)
label_1 = ttk.Label(frame_2, text="Text")
label_1.grid(row=0, column=0, sticky="N, E")
root.mainloop()
在定义frame_1,frame_2和label_1的每一行的末尾添加.pack()