2017-04-26 65 views
0

继续前进,但现在我无法摆脱canvaspopup,即使使用pack_forget()。其他的一切似乎都行得通,我准备用完整程序的一个非常愚蠢的版本来测试它,所以我可以在这里发布代码而不用发布超过1000行代码。隐藏画布,第2部分

import tkinter as tk 
from tkinter import * 

class Example(tk.Frame): 
    def __init__(self, parent): 
     tk.Frame.__init__(self, parent) 

     self.keys = dict.fromkeys(('Left', 'Right', 'Up', 'Down', 'Prior', 'Next', 'Shift_L', 'Alt')) 

     self.frame = tk.Frame(self,bg='gray', width=1366, height=714) 
     self.frame.pack() 
     self.canvas = tk.Canvas(self, background="black", width=714, height=714) 
     self.canvas.pack(fill='both', expand=True) 
     self.canvas.place(x=652,y=0) 

     self.canvas.bind("<Alt_L><w>", self.mgram) 
     self.canvas.bind("<Left>", self.left) 
     self.canvas.focus_set() 

    def left(self,event): 
     print('canvas left') 
    def popleft(self,event): 
     print('popup left') 
    def popescape(self,event): 
     self.canvas.focus_set() 
     self.canvaspopup.pack_forget() 

    def mgram(self,event): 
     self.canvaspopup = Canvas(self, width=800, height=614) 
     self.canvaspopup.pack(fill='both', expand=True) 
     self.canvaspopup.place(x=284,y=52) 
     self.png = Label(self.canvaspopup) 
     self.png.pack()    
     self.popupimage1 = PhotoImage(file='example.png') 
     self.canvaspopup.bind("<Left>", self.popleft) 
     self.canvaspopup.bind("<Escape>", self.popescape) 
     self.canvaspopup.focus_set() 
     self.png.config(image=self.popupimage1) 
     s = Canvas(self.canvaspopup, width=800, height=14) 
     s.pack_propagate(0) 
     s.place(x=0,y=600) 
     v = Label(s, fg='black',borderwidth=0,anchor='center',text = 'Image of: ') 
     v.pack() 

if __name__ == "__main__": 
    root = tk.Tk() 
    Example(root).pack(fill="both", expand=True) 
    root.mainloop() 

如何使弹出的消失,据说是我刚才的问题布赖恩说,我可以用pack_forget(),但不能在这里工作。其他的一切似乎都是正确的。仍不确定为什么我今天早上在家里无法让focus_set工作。不知道我现在改变了什么?

回答

0

在先前的问题中,您询问如何隐藏使用pack管理的窗口,并且我说的是pack_forget。在此代码中,您正在使用place,因此命令将是place_forget

您致电pack,但立即呼叫place。只有一个几何管理器(packplace,grid)可以管理一个小部件,并且它始终是您在该小部件上使用的最后一个。

+0

谢谢你的解释。我将不得不对这三种方法做更多的研究。我认为网格和包装被用于最终“启动”该对象。我不知道地方可能会如此。我认为这只是为了控制屏幕上放置物品的位置,而不是物体的实际“设置”。 – confused

+0

@confused:所有三者都有相同的目的:在屏幕上安排小部件。 –