无法在顶级 window 中创建框架
Cannot create frame in Toplevel window
我有 1 个根 window 和一个顶层 window,我想把东西放在顶层 window 的框架中。但是,框架(而不是其中的标签)出现在根 window.
windows 的屏幕截图。
from tkinter import *
root = Tk()
Label(root, text="label1").pack()
newWindow = Toplevel(root)
Label(newWindow, text="label2").pack()
frame2 = Frame(newWindow).pack()
Label(frame2, text="framelabel2").pack()
root.mainloop()
您需要像这样在新行上打包 frame2
:
from tkinter import *
root = Tk()
Label(root, text="label1").pack()
newWindow = Toplevel(root)
Label(newWindow, text="label2").pack()
frame2 = Frame(newWindow)
frame2.pack() # pack frame2 on new line here.
Label(frame2, text="framelabel2").pack()
root.mainloop()
你的 framelabel2
标签被放置在根 window 上的原因是 frame2
被 == 到 None
为 pack()
returns None
。因为你试图将一个小部件打包到 None
tkinter 将该小部件默认为根目录 window 以尝试将该小部件放置在某个地方。
简单的解决方法是确保在定义框架或任何容器时始终在新行上执行 pack()
、grid()
或 place()
。
在这种情况下不需要两个框架,只需使用 grid
对齐标签即可:
column
、row
格式也更易于阅读,您还可以选择 padx
、pady
、sticky
等其他选项,以提高设计的灵活性。
import tkinter as tk
root = tk.Tk()
frame = tk.Frame(root)
frame.grid()
root.title("Tkinter Window") # Replace with anything else you want
label1 = tk.Label(root, text="Label1").grid(column=0,row=0)
label2= tk.Label(root,text="Label2").grid(column=0,row=1)
root.mainloop()
您可以了解更多 grid
here。
我有 1 个根 window 和一个顶层 window,我想把东西放在顶层 window 的框架中。但是,框架(而不是其中的标签)出现在根 window.
windows 的屏幕截图。
from tkinter import *
root = Tk()
Label(root, text="label1").pack()
newWindow = Toplevel(root)
Label(newWindow, text="label2").pack()
frame2 = Frame(newWindow).pack()
Label(frame2, text="framelabel2").pack()
root.mainloop()
您需要像这样在新行上打包 frame2
:
from tkinter import *
root = Tk()
Label(root, text="label1").pack()
newWindow = Toplevel(root)
Label(newWindow, text="label2").pack()
frame2 = Frame(newWindow)
frame2.pack() # pack frame2 on new line here.
Label(frame2, text="framelabel2").pack()
root.mainloop()
你的 framelabel2
标签被放置在根 window 上的原因是 frame2
被 == 到 None
为 pack()
returns None
。因为你试图将一个小部件打包到 None
tkinter 将该小部件默认为根目录 window 以尝试将该小部件放置在某个地方。
简单的解决方法是确保在定义框架或任何容器时始终在新行上执行 pack()
、grid()
或 place()
。
在这种情况下不需要两个框架,只需使用 grid
对齐标签即可:
column
、row
格式也更易于阅读,您还可以选择 padx
、pady
、sticky
等其他选项,以提高设计的灵活性。
import tkinter as tk
root = tk.Tk()
frame = tk.Frame(root)
frame.grid()
root.title("Tkinter Window") # Replace with anything else you want
label1 = tk.Label(root, text="Label1").grid(column=0,row=0)
label2= tk.Label(root,text="Label2").grid(column=0,row=1)
root.mainloop()
您可以了解更多 grid
here。