2016-04-25 14 views
1

Ich habe diesen Python-Code, den Druck Text prompt geschrieben:Tkinter bind Funktion

from Tkinter import * 

class CommandList(object): 
    show = False 
    def __init__(self): 
     self.show = False 

    def show(self): 
     print "showed" 

    def hide(self): 
     self.show = False 


    def is_showed(self): 
     return self.show 


master = Tk() 
tab = CommandList() 



e = Entry(master, width=1000) 
e.pack() 

def enter(event): 
    master.quit() 
def escape(event): 
    exit() 
def tabulator(tab): 
    print type(tab) 
    tab.show() 


e.bind('<Control_L>j', enter) 
e.bind('<Return>', enter) 
e.bind('<Escape>', escape) 

e.bind('<Tab>', lambda event, tab=tab: tabulator(tab)) 

e.focus_set() 
master.mainloop() 
print e.get() 


Es funktioniert gut, aber wenn ich drücke Tab-Taste, so dass ich Fehler:

<class '__main__.CommandList'> 
Exception in Tkinter callback 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1535, in __call__ 
    return self.func(*args) 
    File "stack-question.py", line 41, in <lambda> 
    e.bind('<Tab>', lambda event, tab=tab: tabulator(tab)) 
    File "stack-question.py", line 34, in tabulator 
    tab.show() 
TypeError: 'bool' object is not callable 

Ich sehe, dass Registerkarte ist CommandList, also warum bekomme ich "TypeError: 'bool' Objekt ist nicht aufrufbar" ??

Antwort

2

Sie definiert show zu einem bool gleich Falsch mit der ersten Zeile in Ihrer CommandList Klasse, dann hat es sowieso nicht verwendet. Wenn Sie nun ein Objekt CommandList haben, versucht show(), das von Ihnen definierte Bool auf Klassenebene aufzurufen, und nicht die Methode.

+0

Ja vielen Dank. Ich habe diesen dummen Fehler übersehen ... – LegnaRuoy