2014-05-14 162 views
0

我写了一个可折叠窗框窗口小部件,并希望给它一个停靠/取消停靠属性。从我读过的内容来看,小部件不能放置在其他小部件“之上”(除了在画布上,我希望避免),所以我不能只是“抬起”框架,而且他们的主人不能改变,所以我可以不要将框架放入新的Toplevel中。我能想到的唯一的其他选择是将小部件复制到新的Toplevel中。不幸的是,在创建新小部件之前,我没有看到复制或深层复制操作上的任何选项来更改主控。Python tkinter复制窗口小部件到新主窗口

所以,问题: 这些假设是准确的,还是有办法做这些事情?

如果没有,我有任何其他选项不是解决办法,我在这里一起放:

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

没有办法重新设置父级的窗口小部件到不同的顶层。最简单的方法是创建一个方法来重新创建新父项中的小部件。

小工具可以堆叠在彼此之上,但它需要小心。例如,您可以使用网格将两个小部件放置在同一个单元格中,并且您可以使用地点将一个小部件放在另一个小部件之上。

相关问题