Python 2.7 如何使用键盘输入结束Python Tkinter图像

Python 2.7 如何使用键盘输入结束Python Tkinter图像,python-2.7,tkinter,python-imaging-library,Python 2.7,Tkinter,Python Imaging Library,此主题失败后:。我决定改变我的方法,为了显示全屏黑色图像,我使用了PIL和Tkinter库。 但我一直在寻找一种方法来关闭我的全黑图像,但我想不出来。 我的解决方案应该类似下面的代码,使用openCv中的键 import Tkinter as tk from PIL import ImageTk from PIL import Image import cv2 import numpy as np root = tk.Tk() root.title('background image') i

此主题失败后:。我决定改变我的方法,为了显示全屏黑色图像,我使用了PIL和Tkinter库。 但我一直在寻找一种方法来关闭我的全黑图像,但我想不出来。 我的解决方案应该类似下面的代码,使用openCv中的键

import Tkinter as tk
from PIL import ImageTk
from PIL import Image
import cv2
import numpy as np


root = tk.Tk()
root.title('background image')
imageFile = "nera.jpg"
image1 = ImageTk.PhotoImage(Image.open(imageFile))
w = image1.width()
h = image1.height()
x = 0
y = 0
root.geometry("%dx%d+%d+%d" % (w, h, x, y))
panel1 = tk.Label(root, image=image1)
panel1.pack(side='top', fill='both', expand='yes')
panel1.image = image1
root.overrideredirect(True)

root.mainloop()

key=cv2.waitKey(0)&0xFF
while True:
    if key==ord('d') or key==ord('a')  or key==ord('s') or key==ord('w') or key==27:
        root.destroy()
        print 'ciao
我怎样才能关闭它,做其他事情,然后再打开它?
谢谢两个问题。首先,您从未读取过键,也从未到达while循环,因为它位于
root.mainloop()
之后。其次,如果程序将进入循环,它将永远不会离开循环,因为没有中断。因此,要修复您的方法,请尝试以下方法:

# comment out root.mainloop() or just remove the line

while True:
    key=cv2.waitKey(0)&0xFF
    if key==ord('d') or key==ord('a')  or key==ord('s') or key==ord('w') or key==27:
        root.destroy()
        print 'ciao'
        break
或者,您可以使用tkinter方法使小部件响应按键,而不是求助于丑陋的openCV黑客:

root.bind("a", lambda x: root.destroy())
root.bind("d", lambda x: root.destroy())
root.bind("s", lambda x: root.destroy())
root.bind("w", lambda x: root.destroy())
root.bind("<Escape>", lambda x: root.destroy())

root.mainloop()
root.bind(“a”,lambda x:root.destroy())
root.bind(“d”,lambda x:root.destroy())
root.bind(“s”,lambda x:root.destroy())
root.bind(“w”,lambda x:root.destroy())
root.bind(“,lambda x:root.destroy())
root.mainloop()

谢谢!使用openCV hack的第一个方法不起作用(因为我在项目中使用了它),没有root.mainloop()黑色图像不会出现。但是第二次它工作得很好!