我的问题有点复杂,但我会尽力描述它。
问题:
我有一个应用程序,它使用Notebook对象并在两个选项卡中的Canvas对象(使用Entry对象和网格管理器)上构建psuedo-tables。我设置了一些函数来从Notebook中的一个选项卡中删除一行,并通过按下按钮在另一个选项卡中动态填充它。但是,由于网格管理器的工作原理,我遇到了一个问题 - 我的行有时会填充在现有行的顶部。通过一些实验,我相信我找到了原因。 假设我创建了3行 - 网格管理器将在生成它们时使用第1,2和3行打包它们。如果我决定将第1行从“主”选项卡移动到“其他”选项卡,则第1行中的窗口小部件将被销毁(使用destroy()方法),并且其下方行中的任何窗口小部件都会在视觉上向上移动;但他们的网格管理器行值没有改变。那个事实(行值事物)正在为我创造一个问题。为了动态填充内容,我使用一个指向窗口小部件对象的数组,这样我就可以在运行时引用它们,之前我曾想过在动态添加任何内容之前只需抓住这个数组的长度,在该值上加1,然后告诉它网格管理器开始填充“调整后的长度值”足以防止任何意外叠加。我没有考虑过分配的初始行值仍然被网格管理员认为是“正在使用”。
示例
当前解决方法
我目前的解决方法(通常是一个糟糕的计划)是简单地创建一个计数器,只要添加新行,该计数器的数量总是会增加。因此第1行将被推入第4行。如果我重复此过程,则下一行将填充为第5行(尽管我仍然只有3行小部件)。一旦应用程序关闭并重新打开,此计数器基本上会重置。由于Python中最大的整数是天文数字(我认为有人在StackOverflow上提供了一个显示9 Quintillion的数字),因此用户在重置之前不可能达到该数字。
StackOverflow的问题
执行这些事情通常很糟糕,我想知道是否有更好的方法来动态填充这些行,所以我不必使用计数器变量?