进一步,但现在我无法摆脱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(),但这不起作用。其他一切似乎都正常工作。仍然不确定为什么我今天早上在家里无法让焦点工作。不知道我现在改变了什么???
答案 0 :(得分:0)
在之前的一个问题中,您询问了如何隐藏使用pack
管理的窗口,我说pack_forget
。在此代码中,您使用place
,因此命令为place_forget
。
您致电pack
但立即致电place
。只有一个几何管理器(pack
,place
,grid
)可以管理窗口小部件,它始终是您在该窗口小部件上使用的最后一个窗口小部件。