2014-05-14 204 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

沒有辦法重新設置父級的窗口小部件到不同的頂層。最簡單的方法是創建一個方法來重新創建新父項中的小部件。

小工具可以堆疊在彼此之上,但它需要小心。例如,您可以使用網格將兩個小部件放置在同一個單元格中,並且您可以使用地點將一個小部件放在另一個小部件之上。

相關問題