我写了一个可折叠的框架小部件,并希望给它一个停靠/取消停靠属性。从我读过的内容来看,小部件不能放在“其他小部件”上(除了画布,我希望避免),所以我不能只是“抬起”框架,他们的主人不能改变所以我可以不要简单地将框架放入新的Toplevel。我能想到的唯一其他选择是将小部件复制到新的Toplevel中。不幸的是,在创建新窗口小部件之前,我没有在复制或深度复制操作上看到任何更改主文件的选项。
所以,问题是: 这些假设是准确的,还是有办法做任何这些事情?
如果没有,除了我在这里提出的解决方案之外还有其他选择吗?
def copywidget(self, frame1, frame2):
for child in frame1.winfo_children():
newwidget = getattr(tkinter,child.winfo_class())(frame2)
for key in child.keys(): newwidget[key] = child.cget(key)
if child.winfo_manager() == 'pack':
newwidget.pack()
for key in child.pack_info():
newwidget.pack_info()[key] = child.pack_info()[key]
elif child.winfo_manager() == 'grid':
newwidget.grid()
for key in child.grid_info():
newwidget.grid_info()[key] = child.grid_info()[key]
elif child.winfo_manager() == 'place':
newwidget.place()
for key in child.place_info():
newwidget.place_info()[key] = child.place_info()[key]
答案 0 :(得分:0)
无法将窗口小部件重新显示为不同的顶层。最简单的方法是创建一个在新父级中重新创建小部件的方法。
小部件可以堆叠在一起,但需要小心。例如,您可以使用网格将两个小部件放在同一个单元格中,您可以使用place将一个小部件放在另一个小部件之上。