使用冲突包/网格调试tkinter程序

时间:2014-03-27 13:51:41

标签: tkinter

我将一个部分或我的程序从使用网格转移到包几何管理器 - 我知道如果你一直这样做,这样你就不会同时使用grid& back 这是可能的这样做。

当然我做错了,但我找不到错误,因为Tkinter似乎没有在这些情况下抛出异常:它只是在运行,而不显示程序界面。

在出现此类冲突的情况下,有一些方法可以调试程序吗?

1 个答案:

答案 0 :(得分:1)

如果将所有几何管理代码放在一起,这就变得相当容易解决。我看到许多人编写这样的代码:

e = Entry(...)
e.grid(...)
f = Frame(...)
f.grid(...)
...

相反,将所有布局移动到一起,如下所示:

e = Entry(...)
f = Frame(...)
...
e.grid(...)
f.grid(...)

通过这样做,当您在同一主控中混合网格和打包时,它应该很快变得明显。此外,当您需要添加或删除其他小部件时,它可以更轻松地在以后重构代码。

以类似的方式,我看到编写这样代码的人:

class Something(tk.Frame):
    def __init__(self, ...):
        self.pack(...)

widget / widget类永远不应该负责在其父级中打包/编译自己。如果在代码中的其他位置更改几何管理器,则需要检查每个其他类以查找哪些类将自身插入到容器中。无论代码创建什么代码,孩子都应负责为这些孩子打电话或打包。

最后,确保对于任何给定的容器,所有的包装和磨削都在一个地方进行。不要对分布在两个或多个功能或类别中的单个容器进行打包或网格调用。

如果您重构代码以遵循这些规则,那么应该很容易看出问题出在哪里,因为调用网格的代码行和调用place的代码行将位于相同的代码块中。 / p>

如果您无法进行这些更改,您别无选择,只能在您的代码开始工作之前开始注释掉打包电话(或网格;它并不重要,选择一个)。这应该可以帮助你找出哪个小部件是罪魁祸首。