隐藏画布,第2部分

时间:2017-04-26 19:40:48

标签: python-3.x tkinter

进一步,但现在我无法摆脱canvaspopup,即使使用pack_forget()。其他所有东西似乎都运行正常,因为我正在使用完整程序的一个非常愚蠢的版本进行测试,所以我可以在这里发布代码,而不需要发布1000多行代码。

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(),但这不起作用。其他一切似乎都正常工作。仍然不确定为什么我今天早上在家里无法让焦点工作。不知道我现在改变了什么???

1 个答案:

答案 0 :(得分:0)

在之前的一个问题中,您询问了如何隐藏使用pack管理的窗口,我说pack_forget。在此代码中,您使用place,因此命令为place_forget

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