Python tkinter将小部件复制到新主服务器

时间:2014-05-14 00:59:35

标签: python-3.x tkinter widget

我写了一个可折叠的框架小部件,并希望给它一个停靠/取消停靠属性。从我读过的内容来看,小部件不能放在“其他小部件”上(除了画布,我希望避免),所以我不能只是“抬起”框架,他们的主人不能改变所以我可以不要简单地将框架放入新的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]

1 个答案:

答案 0 :(得分:0)

无法将窗口小部件重新显示为不同的顶层。最简单的方法是创建一个在新父级中重新创建小部件的方法。

小部件可以堆叠在一起,但需要小心。例如,您可以使用网格将两个小部件放在同一个单元格中,您可以使用place将一个小部件放在另一个小部件之上。