我正在制作一个具有单选按钮的GUI,以选择要显示的不同信息。它可以显示树视图或matplotlib图。树视图效果很好,我可以在不同的树之间来回切换。如果我从图表开始,它也表现得很好。挑战在于,如果我从树视图进入图表视图,图表将隐藏在树视图后面,即使树视图已被破坏。
elif self.show.get()=="graph":
f = makeGraph(int(self.gameType.get()))
for child in self.display_frame.winfo_children(): child.destroy()
canvas = FigureCanvasTkAgg(f,master = self.display_frame)
canvas.show()
canvas.get_tk_widget().grid(column=0,row=0,sticky=(N,S,E,W))
makeGraph函数只返回一个matplotlib图对象。
我希望树视图消失,图表出现并调整框架大小以适应(更大)图形。
相反,框架被调整大小(图形的一小部分在底部可见),但是树视图会随之调整大小,尽管被破坏,仍会以某种方式保留。
使用以下代码在其他地方创建树视图:
for child in self.display_frame.winfo_children(): child.destroy()
self.tree = ttk.Treeview(columns=self.tree_headers, show="headings")
vsb = ttk.Scrollbar(orient="vertical", command=self.tree.yview)
#hsb = ttk.Scrollbar(orient="horizontal", command=self.tree.xview)
self.tree.configure(yscrollcommand=vsb.set)
self.tree.grid(column=0, row=0, sticky=(N,S,E,W), in_=self.display_frame)
答案 0 :(得分:0)
所以经过一些游戏,我意识到了
for child in self.display_frame.winfo_children(): child.destroy()
无法可靠地破坏树视图。它甚至找不到它。我认为这必须与树的创建方式有关。层次结构是使用关键字"在_"中建立的。在网格调用内。所以我更改了代码以明确删除有问题的小部件和改进的东西。
f = makeGraph(int(self.gameType.get()))
try:
self.vsb.destroy()
except:
pass
try:
self.tree.destroy()
except:
pass
try:
self.toolbar.destroy()
except:
pass
try:
self.canvas.get_tk_widget().destroy()
except:
pass
self.canvas = FigureCanvasTkAgg(f,master = self.display_frame)
self.canvas.show()
self.canvas.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1)
self.toolbar = NavigationToolbar2TkAgg( self.canvas, self.display_frame )
self.toolbar.update()
self.canvas._tkcanvas.pack(side=TOP, fill=BOTH, expand=1)