2014-03-27 30 views
0

我错开的部分或使用网格包几何经理我的计划 - 我知道,如果你做到这一点始终让你不处于同一水平同时使用电网&回这是可能的。调试的Tkinter程序

当然,我做错了什么,而是因为Tkinter的似乎不扔在这样的情况下例外,我无法找到的错误:它只是坐在运行,而不再显示程序界面。

在这种冲突的情况下,有一些方法可以调试程序吗?

回答

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类不应该负责装箱/其父griding本身。如果您在代码中的其他位置更改几何管理器,则需要您检查其他每个类以查找哪些类将自己插入到容器中。无论代码如何创建,孩子都应负责调用网格或打包这些孩子。

最后,请确保任何给定的容器,所有的包装和griding的发生在同一个地方。对于一个容器分布在两个或更多个函数或类上的包或网格调用没有。

如果您重构您的代码以遵循这些规则,应该很容易地看到问题出在哪里,因为调用网格的代码行和调用位置的代码行将位于同一代码块中。

如果无法做出这些改变,你别无选择,只能开始注释掉调用包(或网格;没关系,选一个),直到你的代码开始工作。这应该可以帮助你找出哪个部件是罪魁祸首。

+0

像往常一样非常清晰,谢谢。但我仍然不明白为什么这是唯一的例子(我知道)在面对明显的错误时,根本不会产生错误 – alessandro