安装Anaconda后我遇到了几个错误。 当我运行程序时,我收到消息:
TclError: cannot use geometry manager pack inside . which already has slaves managed by grid
该程序是使用Python 3.3编写的。 Anaconda版本适用于3.4。但我不认为3.3和3.4之间存在任何语法差异。 我搜索过,找不到任何解决此错误的方法。 我甚至都不知道这意味着什么。
谢谢。
答案 0 :(得分:5)
如果在同一主窗口中混合pack()
和grid()
,则会发生此错误。根据{{3}},这是一个坏主意:
警告:切勿在同一主窗口中混合网格和打包。 Tkinter的 我将很乐意度过余生,努力谈判 两位经理都满意的解决方案。而不是等待,杀死 应用程序,再看看你的代码。一个常见的错误 是为某些小部件使用错误的父级。
例如,此代码适用于Python 3.3.x,但不适用于Python 3.4.x(抛出您提到的错误):
from tkinter import *
from tkinter import ttk
root = Tk()
mainframe = ttk.Frame(root)
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
nb = ttk.Notebook(root)
nb.pack()
root.mainloop()
此代码不适用于两个Python版本:
from tkinter import *
root = Tk()
Label(root, text="First").grid(row=0)
Label(root, text="Second").pack()
root.mainloop()
为避免这种情况,请仅为给定父级的所有子级使用一个几何管理器,例如grid()
。
答案 1 :(得分:2)
错误意味着你正在做这样的事情:
widget1 = tk.Label(root, ...)
widget2 = tk.Label(root, ...)
widget1.grid(...)
widget2.pack(...)
您不能在具有相同父级的小部件上混合包和网格。 可能可以在某些旧版本的tkinter上运行,但前提是你很幸运。解决方案是直接的:切换到仅使用网格或仅包装,用于共享同一父级的所有小部件。
代码似乎在一个版本中工作但不是另一个版本,因为后一版本使用更新版本的tkinter。 Tkinter没有使用这个警告 - 它会尝试继续运行,通常会带来灾难性的后果。程序是否有效或冻结取决于许多因素。通常程序会冻结并使用接近100%的cpu,有时它会工作,有时它会工作,直到你调整窗口大小。无论如何,你不应该做任何任何版本的Tkinter。