使用grid(tkinter)时,标签离开嵌套框架

问题描述 投票:0回答:2

这只是一个简单的问题,但是当你使用粘性时,标签是否应该留在它的嵌套框架内?在我的代码中,它只保留在父框架中。如果这是正常的,你有解决方案吗?

我试过看文档,但我找不到任何可以帮助的东西。

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()

预期结果:标签位于其框架内,该框架嵌套在父框架内。实际结果:它只保留在父框架内

python tkinter
2个回答
1
投票

.grid(...)函数返回None。因此,当你这样做

frame_1 = ttk.Frame(root, relief="sunken", height="400", width="400").grid(row=0, column=0, rowspan=1, columnspan=1)

你把None分配给frame_1frame_2label_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()

-2
投票

在定义frame_1,frame_2和label_1的每一行的末尾添加.pack()

© www.soinside.com 2019 - 2024. All rights reserved.