Tkinter:为什么 .grid() 方法出错?

Tkinter: why .grid() method giving an error?

代码:

import tkinter as tk
import random as rd

number = rd.randint(10,51)
trial = 0
chance = 0

window = tk.Tk()
window.title("Guess")
label = tk.Label(window, text="Guess a number that can be anything from '10' to '50', you have 5 chances !!!\n", font=("Arial Bold",20)).pack()

bt = tk.Button(window, text="Enter")
bt.grid(column=3, row=3)

window.geometry('2000x1000')
window.mainloop()

错误:_tkinter.TclError: cannot use geometry manager grid inside . which already has slaves managed by pack

如果我尝试删除 'label' 中的 .pack(),文本不会加载并且按钮仍然保持在 (0,0) 而没有错误

您需要使用 grid 或 pack,不能同时使用。这是我的经验之谈。

Error: _tkinter.TclError: cannot use geometry manager grid inside . which already has slaves managed by pack It says it's managed by pack, so you need to use pack manager "OR" grid manager

错误很明显,您不能在容器或 window 中混合使用 pack()grid()。在这里,您在 label 上使用 pack(),在 btn 上使用 grid()。所以把label改成grid()。或者将 bt.grid(..) 更改为 bt.pack().


请注意,您的 labelNone,如果您打算重新使用该标签,以后可能会导致一些错误。所以理想的方法是 grid()/pack() 在下一行:

label = tk.Label(window, text="Guess a number that can be anything from '10' to '50', you have 5 chances !!!\n", font=("Arial Bold",20))
label.pack()

如果您不打算重用它,那么根本就不用费心给它起一个变量名。

你所要做的就是将标签更改为也使用网格而不是包,我更改了下面的行:

label = tk.Label(window, text="Guess a number that can be anything from '10' to '50', you have 5 chances !!!\n", font=("Arial Bold",20))
label.grid()