【问题标题】:tkinter variable.grid(row=0) [duplicate]tkinter variable.grid(row=0) [重复]
【发布时间】:2016-10-27 07:34:47
【问题描述】:

我已经开始使用 tkinter,但我遇到了这样的问题。例如,

from tkinter import *

root = Tk()

frame = Frame(root)
frame.pack()

theLabel = Label(root, text="bla bla")
theLabel.grid(row=0)

root.mainloop()

此代码不起作用并给出类似的错误。

File "C:\Users\Kenan\AppData\Local\Programs\Python\Python35-32\lib\tkinter\__init__.py", line 2074, in grid_configure
    + self._options(cnf, kw))
_tkinter.TclError: cannot use geometry manager grid inside . which already has slaves managed by pack

【问题讨论】:

    标签: python-3.x tkinter


    【解决方案1】:

    正如@Luke.py 所述,您不能在同一个小部件中混合使用grid()pack()

    • 在第 6 行,您在 root 中打包了一个 Frame
    • 在第 9 行,您在 root 内网格化 Label

    也许您的意思是在框架内 grid() Label,在这种情况下将第 8 行更改为

    theLabel = Label(frame, text="bla bla")
    

    或者您可能确实希望 FrameLabel 在同一级别,在这种情况下,将第 6 行更改为

    frame.grid()
    

    【讨论】:

    • 谢谢大家,我的错误是框架。我不应该使用它。当我删除它工作。谢谢大家:)
    • 如果你开始在所有平台上使用 ttk 来获得更多本机外观的控件和窗口,你会希望在每个 Toplevel 中放置一个 ttk.Frame 以获得正确的(系统默认)颜色背景跨度>
    【解决方案2】:

    当您在同一框架/根中使用包和网格的组合时,会出现此问题。

    将第 9 行的 grid 更改为 pack(),反之亦然。

    from tkinter import *
    
    root = Tk()
    
    frame = Frame(root)
    frame.pack()
    
    theLabel = Label(frame, text="bla bla") *this should use frame - not root
    theLabel.grid()
    
    root.mainloop()
    

    希望这会有所帮助! 卢克

    【讨论】:

    • 首先感谢您的回答。但是, .pack 无论如何都可以工作。我需要使用.grid。实际上我已经写了一些条目,我想在标签附近找到它们。你能帮我解决这个问题吗?
    • 您更改了Label 的根目录(从rootframe),这将修复它。但另外,您还将grid 更改为pack,这不再需要了。
    • @xZise 好地方!谢谢
    猜你喜欢
    • 1970-01-01
    • 2012-04-13
    • 2023-02-16
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    相关资源
    最近更新 更多