2017-05-25 109 views
-1

的工作,我有一些代码,这里简化它,但该事件将无法正常工作,我可以请得到一些帮助不event.wiget.pack_forget()中的Tkinter

from tkinter import * 
root = Tk() 
def Delete(): 
    event.wiget.pack_forget() 

db = Button(root, text = "delete", command = Delete) 
db.pack() 

错误代码如下

Exception in Tkinter callback 
Traceback (most recent call last): 
File "/usr/lib/python3.5/idlelib/run.py", line 119, in main 
seq, request = rpc.request_queue.get(block=True, timeout=0.05) 
File "/usr/lib/python3.5/queue.py", line 172, in get 
raise Empty 
queue.Empty 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "/usr/lib/python3.5/tkinter/__init__.py", line 1550, in __call__ 
    return self.func(*args) 
    File "/home/travis/trying to delete stuff.py", line 4, in Delete 
event.wiget.pack_forget() 
NameError: name 'event' is not defined 

由于事先

+0

当你运行该代码会发生什么?我猜你会得到一个错误。请发布完整的错误。它告诉你到底是什么问题。 –

+0

您试图“忘记”哪个小工具? – CommonSense

+0

按钮,db。使用删除功能的那个。 - CommonSense – Travis

回答

1

的问题是,使用按钮的command参数没有通过一个event对象到功能它呼吁。如果你想要一个事件,你需要尝试这样的事情:

from tkinter import * 
root = Tk() 
def Delete(event): 
    event.widget.pack_forget() 

db = Button(root, text = "delete") 
db.bind('<Button-1>', Delete) # using a binding triggers an event 
db.pack() 
root.mainloop() 
+0

虽然我仍然运行它,但仍然收到错误代码。 – Travis

+0

回溯(最近一次通话最后): 文件“/ home/travis /试图删除stuff.py”,第7行,在 db.bind('',删除)#使用绑定触发事件 File “/usr/lib/python3.5/tkinter/__init__.py”,第1099行,绑定 return self._bind(('bind',self._w),sequence,func,add) 文件“/ usr/lib/python3.5/tkinter/__init__.py“,行1054,在_bind self.tk.call(what +(sequence,cmd)) _tkinter.TclError:bad event type or keysym”Button1“ – Travis

+0

my error,我错过了一个连字符,肯定会回答。和@CommonSense预定义的行为是无关紧要的,因为绑定可以被链接(在同一个事件上是多重的)并且通过添加'return'break''添加的最后一个绑定可以防止以前的绑定被触发 –