我错开的部分或使用网格包几何经理我的计划 - 我知道,如果你做到这一点始终让你不处于同一水平同时使用电网&回这是可能的。调试的Tkinter程序
当然,我做错了什么,而是因为Tkinter的似乎不扔在这样的情况下例外,我无法找到的错误:它只是坐在运行,而不再显示程序界面。
在这种冲突的情况下,有一些方法可以调试程序吗?
我错开的部分或使用网格包几何经理我的计划 - 我知道,如果你做到这一点始终让你不处于同一水平同时使用电网&回这是可能的。调试的Tkinter程序
当然,我做错了什么,而是因为Tkinter的似乎不扔在这样的情况下例外,我无法找到的错误:它只是坐在运行,而不再显示程序界面。
在这种冲突的情况下,有一些方法可以调试程序吗?
如果你把所有的几何管理代码放在一起,这变得比较容易解决的。我看到谁像这样写代码许多人:
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的发生在同一个地方。对于一个容器分布在两个或更多个函数或类上的包或网格调用没有。
如果您重构您的代码以遵循这些规则,应该很容易地看到问题出在哪里,因为调用网格的代码行和调用位置的代码行将位于同一代码块中。
如果无法做出这些改变,你别无选择,只能开始注释掉调用包(或网格;没关系,选一个),直到你的代码开始工作。这应该可以帮助你找出哪个部件是罪魁祸首。
像往常一样非常清晰,谢谢。但我仍然不明白为什么这是唯一的例子(我知道)在面对明显的错误时,根本不会产生错误 – alessandro