2010-10-22 2 views
-1

Я написал следующий код питонаPython: переменная неправильно инициализирована?

self._job = None 

#slider 
def sliderCallback(self): 
    if self._job: 

И я получаю сообщение об ошибке

AttributeError: 'str' object has no attribute '_job' 

почему? Я думал, что я инициализируется переменную перед ...

Update Та же проблема с таймером переменной

import Tkinter as tk 
import vtk 
from time import * 
from threading import * 
from vtk.tk import * 
from Visualization import * 
from Histogram import * 
from ListItem import * 

class UI(tk.Frame): 

    def build(self, root): 

     #left column 
     self.leftFrame = tk.Frame(root, width=400, height=550, bg="black") #.grid(column=4, row=0) 
     self.leftFrame.pack(fill=tk.BOTH, expand=True, side=tk.LEFT) 

     #right column 
     self.rightFrame = tk.Frame(root, width=400, height=550, bg="black") #.grid(column=4, row=0) 
     self.rightFrame.pack(fill=tk.BOTH, expand=True, side=tk.RIGHT) 
     #self.rightBottomFrame = tk.Frame(rightFrame, width=400, height=550, bg="red") #.grid(column=4, row=0) 

     #visualization 
     self.vis = Visualization(self.rightFrame, 400, 350, tk.RIGHT) 
     #self.vis.updateContourValue(400) 

     #left column 
     self.middleFrame = tk.Frame(root, width=400, height=550, bg="black") #.grid(column=0, columnspan=4, row=0) 
     self.middleFrame.pack(fill=tk.Y, expand=True) 

     #isosurfaces list 
     def addItem(color, volume, surface):   
      listitem = ListItem(self.listFrame, color, volume, surface) 

     self.listFrame = tk.Frame(self.middleFrame, width=400, height=500, bg="black") #.grid(column=0, columnspan=4, row=0) 
     self.listFrame.pack(fill=tk.BOTH, expand=True, side=tk.TOP) 
     addItem("#243", self.vis.getVolume(), self.vis.getSurface()) 

     #preview 
     self.preview = Visualization(self.middleFrame, 200, 200, tk.BOTTOM) 
     #self.preview.updateContourValue(1500) 

     #histogram 
     self.histFrame = Histogram(self.leftFrame, 400, 400, tk.TOP, self.preview.getData()) 


     #slider 
     def updateValue(self): 
      self.preview.updateContourValue(float(self.slider.get())) 
      print "updated value" 

     self.timer = Timer(5.0, updateValue) 

     def sliderCallback(self): 
      self.timer.cancel() 
      self.timer.start() # after 30 seconds, "hello, world" will be printed 
      #if self._job: 
       #root.after_cancel(self._job) 
       #print "remove it" 
      #self._job = root.after(500, self.updateValue) 

     #def updateValue(value): 
      #print('horizontal: {v}'.format(v=value)) 

     self.slider = tk.Scale(self.leftFrame, from_=0, to=256, orient=tk.HORIZONTAL, command=sliderCallback) #.grid(column=0, columnspan=3, row=1) 
     self.slider.pack(in_=self.leftFrame, fill=tk.X) 
     self.slider.set(200) 

     #add Isosurface button 
     def addIso(): 
      addItem("#243", self.vis.getVolume(), self.vis.getSurface()) 

     self.addButton = tk.Button(self.leftFrame, text="Add", command=addIso) #.grid(column=3, row=1) 
     self.addButton.pack(in_=self.leftFrame, side="right", pady=2) 
+4

Можете ли вы показать полное определение класса? –

+0

Является ли этот код частью метода? Каков контекст? –

+0

@Felix Kling это в классе – aneuryzm

ответ

0

Редактировать: С вашим только что предоставленным кодом в классе не должно быть определения self._job или _job.

Основываясь на вашей текущей информации, по какой-либо причине функция получает строку для себя, а не экземпляр класса, который вы определили.

0

, если это происходит в классе: попробуйте изменить self._job = None к _job = None - на этом шаге self не заявлено, я думаю

+0

Нет, это увеличит значение NameError – knitti

1

попробовать это:


self.slider = tk.Scale(self.leftFrame, from_=0, to=256, orient=tk.HORIZONTAL, command=self.sliderCallback) 

разница является self при вызове sliderCallback должен быть привязан к его примеру, чтобы быть полезным.

0

updateValue и sliderCallback должны быть определены как методы класса. Вы определили их как локальные функции метода build. Кроме того, рассмотрите ответ китти.

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