在安装Anaconda之后,我遇到了几个错误。当我运行一个程序时,我得到这样的信息:
TclError: cannot use geometry manager pack inside . which already has slaves managed by grid
该程序是使用Python3.3编写的。Anaconda版本是3.4版本。但我不认为3.3和3.4之间有任何语法差异。我搜索了一下,但是找不到这个错误的任何解决方案。我甚至不知道这是什么意思。
谢谢。
发布于 2014-09-18 17:51:03
如果在同一主窗口中混合使用pack()
和grid()
,则可能会发生此错误。根据docs的说法,这不是一个好主意:
警告:切勿在同一主窗口中混用网格和pack。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()
。
发布于 2014-09-30 06:10:50
该错误表示您正在执行以下操作:
widget1 = tk.Label(root, ...)
widget2 = tk.Label(root, ...)
widget1.grid(...)
widget2.pack(...)
您不能在具有相同父组件的小部件上混合使用pack和grid。它可能会在一些旧版本的tkinter上运行,但前提是你够幸运。解决方案很简单:对于共享同一父组件的所有小部件,切换为仅使用网格,或仅使用pack。
代码在一个版本中似乎可以工作,但在另一个版本中却无法工作,这可能是因为较新版本的tkinter使用了较新的版本。Tkinter不会给出这个警告--它会尝试继续运行,通常会带来灾难性的结果。程序是否工作或冻结取决于许多因素。通常程序会冻结并使用接近100%的cpu,有时它会工作,有时它会工作,直到您调整窗口大小。无论如何,这是任何版本的Tkinter都不应该做的事情。
https://stackoverflow.com/questions/25367296
复制相似问题