如何绑定转义键以关闭此窗口

时间:2015-02-12 00:36:07

标签: python python-2.7 tkinter

我有一个小程序,我已拼凑起来下载专利。我想将转义键绑定到关闭窗口的函数,但我真的不知道如何实现这一点。我已将转义键绑定到"退出"功能,但有人可以帮我弄清楚如何编写关闭文本输入窗口的功能?

我是个菜鸟。

from Tkinter import *
import urllib

master = Tk()
e = Entry(master)
e.pack()

e.focus_set()


def patdload(self, event=None): 
    allnums = e.get()
    index = 0
    test = allnums.find('.')
    if test > 0:
        sep = 0
        while sep != -1:
            sep = allnums.find('.', index) 
            if sep != -1:
                patno = allnums[index:sep]
            elif sep == -1:
                patno = allnums[index:]

            #patno = e.get()
            paturl = "http://patentimages.storage.googleapis.com/pdfs/US" + patno + ".pdf"
            urllib.urlretrieve (paturl, (patno + ".pdf"))
            index = sep + 1


    else:
        patno = e.get()
        paturl = "http://patentimages.storage.googleapis.com/pdfs/US" + patno + ".pdf"
        urllib.urlretrieve (paturl, (patno + ".pdf"))


def quit #help#:

master.bind('<Return>', patdload)

master.bind('<Escape>',quit)



#b = Button(master, text = "GET", width = 10, command = patdload)
#b.pack()


mainloop()

编辑:这是新错误:

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1532, in __call__
return self.func(*args)
File "C:\Python27\PatentGet.py", line 42, in <lambda>
master.bind('<Escape>', lambda x: close())
File "C:\Python27\PatentGet.py", line 39, in close
master.widthdraw() # if you want to bring it back
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1894, in __getattr__
return getattr(self.tk, attr)
AttributeError: widthdraw

3 个答案:

答案 0 :(得分:4)

首先,quit是一种内置方法,因此我使用其他名称。否则,这里的功能是:

import sys

def close(event):
    master.withdraw() # if you want to bring it back
    sys.exit() # if you want to exit the entire thing

master.bind('<Escape>', close)

答案 1 :(得分:1)

您可以在lambda表达式中使用destroy()方法来安全退出。我在python 3.7.x中使用过。

import tkinter as tk
root = tk.Tk()
root.bind("<Escape>", lambda x: root.destroy())
root.mainloop()

答案 2 :(得分:0)

您应该使用比sys.exit()更安全的退出方法。在我的示例中,root.destroy()是退出Tkinter应用程序的安全,可靠的方法。 destroy()仅终止mainloop并删除所有小部件。因此,如果您从另一个Tkinter应用程序调用您的应用程序,或者您有多个主循环,这似乎更安全。

import tkinter as tk

def exit(event):
    root.destroy()

root = tk.Tk()

root.bind("<Escape>", exit)
root.mainloop()