Python: variable is not correctly initialized?
<p>I wrote the following code in python</p>

<pre><code>self._job = None

#slider
def sliderCallback(self):
   if self._job:
</code></pre>

<p>And I get this error message</p>

<pre><code>AttributeError: 'str' object has no attribute '_job'
</code></pre>

<p>why ? I thought I have initialized the variable before...</p>

<p><strong>Update</strong>
Same issue with Timer variable</p>

<pre><code>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)
</code></pre>
