首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python,无法在内部使用几何管理器包

Python,无法在内部使用几何管理器包
EN

Stack Overflow用户
提问于 2014-08-18 23:52:12
回答 2查看 17K关注 0票数 2

在安装Anaconda之后,我遇到了几个错误。当我运行一个程序时,我得到这样的信息:

代码语言:javascript
运行
复制
TclError: cannot use geometry manager pack inside . which already has slaves managed by grid

该程序是使用Python3.3编写的。Anaconda版本是3.4版本。但我不认为3.3和3.4之间有任何语法差异。我搜索了一下,但是找不到这个错误的任何解决方案。我甚至不知道这是什么意思。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-18 17:51:03

如果在同一主窗口中混合使用pack()grid(),则可能会发生此错误。根据docs的说法,这不是一个好主意:

警告:切勿在同一主窗口中混用网格和pack。Tkinter将愉快地度过你的余生,试图协商出一个双方经理都满意的解决方案。而不是等待,杀死应用程序,并重新检查您的代码。一个常见的错误是对一些小部件使用了错误的父部件。

例如,以下代码适用于Python 3.3.x,但不适用于Python 3.4.x (抛出您提到的错误):

代码语言:javascript
运行
复制
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版本:

代码语言:javascript
运行
复制
from tkinter import *
root = Tk()

Label(root, text="First").grid(row=0)
Label(root, text="Second").pack()

root.mainloop()

要避免这种情况,请仅对给定父对象的所有子对象使用一个几何图形管理器,例如grid()

票数 6
EN

Stack Overflow用户

发布于 2014-09-30 06:10:50

该错误表示您正在执行以下操作:

代码语言:javascript
运行
复制
widget1 = tk.Label(root, ...)
widget2 = tk.Label(root, ...)

widget1.grid(...)
widget2.pack(...)

您不能在具有相同父组件的小部件上混合使用pack和grid。它可能会在一些旧版本的tkinter上运行,但前提是你够幸运。解决方案很简单:对于共享同一父组件的所有小部件,切换为仅使用网格,或仅使用pack。

代码在一个版本中似乎可以工作,但在另一个版本中却无法工作,这可能是因为较新版本的tkinter使用了较新的版本。Tkinter不会给出这个警告--它会尝试继续运行,通常会带来灾难性的结果。程序是否工作或冻结取决于许多因素。通常程序会冻结并使用接近100%的cpu,有时它会工作,有时它会工作,直到您调整窗口大小。无论如何,这是任何版本的Tkinter都不应该做的事情。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25367296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档