2015-03-21 3 views
0

Я пытаюсь проследить переменную:Трассировка self.variable

def callback(*args): 
     print "variable changed!" 
    self.entryVariable = Tkinter.StringVar() 
    self.entryVariable.trace("w", callback) 

Это прекрасно работает, но я хочу на самом деле распечатать переменной в callback:

def callback(self.entryVariable): 
     print "variable changed!" 
     print self.entryVariable.get() 
    self.entryVariable = Tkinter.StringVar() 
    self.entryVariable.trace("w", callback(self.entryVariable)) 

Но, я получаю

def callback(self.entryVariable): 
       ^
SyntaxError: invalid syntax 
+0

https://stackoverflow.com/questions/36901/what-does-double-star-and-star-do-for-python-parameters – OozeMeister

ответ

2

Вы сделали классическую ошибку, не указав функцию trace()function, но возвращаемое значение этой функции. Вы можете использовать lambda, но вы не должны использовать любой параметр на всех, так что просто использовать

self.entryVariable.trace("w", self.callback) 

Вы можете отметить любой self.xxx атрибут в любом месте в своем классе, так что ваш метод становится:

def callback(self, *args): 
    print "variable changed!" 
    print self.entryVariable.get() 
+0

Не * везде *. Пока 'callback' определяется внутри метода экземпляра класса, тогда' self' должен быть доступен. – OozeMeister

+0

Предположим, я хотел бы определить обратный вызов вне метода с помощью 'self.entryVariable.trace (« w », self.callback)'? Я хотел бы связать изменения в переменной с событием .. – user86895

+0

Кстати, 'def callback (* args):' похоже, работает, но 'def callback():' дает 'return self.func (* args) ТипError: callback() не принимает аргументов (3 данных) ' – user86895

Смежные вопросы