views:

114

answers:

1

I wrote a CPU monitoring program in Python. For some reason sometimes the the program will run without any problem. Then other times the program won't even start because of the following error.

Traceback (most recent call last):

File "", line 244, in run_nodebug File "C:\Python26\CPUR1.7.pyw", line 601, in app = simpleapp_tk(None) File "C:\Python26\CPUR1.7.pyw", line 26, in init self.initialize() File "C:\Python26\CPUR1.7.pyw", line 107, in initialize self.F() File "C:\Python26\CPUR1.7.pyw", line 517, in F S2 = TL.entryVariableS.get() NameError: global name 'TL' is not defined

I can't seem to find the problem, maybe someone more experienced may assist me?

Here is a snippet of the part giving me trouble: (The second to last line in the snippet is what's giving me trouble)

def E(self):


    if self.selectedM.get() =='Options...':

Setup

        global TL
        TL = Tkinter.Toplevel(self)




        menu = Tkinter.Menu(TL)
        TL.config(menu=menu)

        filemenu = Tkinter.Menu(menu)
        menu.add_cascade(label="|     Menu     |", menu=filemenu)

        filemenu.add_command(label="Instruction Manual...", command=self.helpmenu)
        filemenu.add_command(label="About...", command=self.aboutmenu)
        filemenu.add_separator()
        filemenu.add_command(label="Exit Options", command=TL.destroy)
        filemenu.add_command(label="Exit", command=self.destroy)

        helpmenu = Tkinter.Menu(menu)
        menu.add_cascade(label="|     Help     |", menu=helpmenu)
        helpmenu.add_command(label="Instruction Manual...", command=self.helpmenu)
        helpmenu.add_separator()
        helpmenu.add_command(label="Quick Help...", command=self.helpmenu)

Title

        TL.label5 = Tkinter.Label(TL,text="CPU Usage: Options",anchor="center",fg="black",bg="lightgreen",relief="ridge",borderwidth=5,font=('Arial', 18, 'bold'))
        TL.label5.pack(padx=15,ipadx=5)

X Y scale

        TL.separator = Tkinter.Frame(TL,height=7, bd=1, relief='ridge', bg='grey95')
        TL.separator.pack(pady=5,padx=5)
#
        TL.sclX = Tkinter.Scale(TL.separator, from_=0, to=1500, orient='horizontal', resolution=1, command=self.A)
        TL.sclX.grid(column=1,row=0,ipadx=27, sticky='w')

        TL.label1 = Tkinter.Label(TL.separator,text="X",anchor="s",fg="black",bg="grey95",font=('Arial', 8 ,'bold'))
        TL.label1.grid(column=0,row=0, pady=1, sticky='S')





        TL.sclY = Tkinter.Scale(TL.separator, from_=0, to=1500, resolution=1, command=self.A)
        TL.sclY.grid(column=2,row=1,rowspan=2,sticky='e', padx=4)

        TL.label3 = Tkinter.Label(TL.separator,text="Y",fg="black",bg="grey95",font=('Arial', 8 ,'bold'))
        TL.label3.grid(column=2,row=0, padx=10, sticky='e')





        TL.entryVariable2 = Tkinter.StringVar()
        TL.entry2 = Tkinter.Entry(TL.separator,textvariable=TL.entryVariable2,
                                    fg="grey15",bg="grey90",relief="sunken",insertbackground="black",borderwidth=5,font=('Arial', 10))
        TL.entry2.grid(column=1,row=1,ipadx=20, pady=10,sticky='EW')
        TL.entry2.bind("<Return>", self.B)

        TL.label2 = Tkinter.Label(TL.separator,text="X:",fg="black",bg="grey95",font=('Arial', 8 ,'bold'))
        TL.label2.grid(column=0,row=1, ipadx=4, sticky='W')





        TL.entryVariable1 = Tkinter.StringVar()
        TL.entry1 = Tkinter.Entry(TL.separator,textvariable=TL.entryVariable1,
                                    fg="grey15",bg="grey90",relief="sunken",insertbackground="black",borderwidth=5,font=('Arial', 10))
        TL.entry1.grid(column=1,row=2,sticky='EW')
        TL.entry1.bind("<Return>", self.B)


        TL.label4 = Tkinter.Label(TL.separator,text="Y:", anchor="center",fg="black",bg="grey95",font=('Arial', 8 ,'bold'))
        TL.label4.grid(column=0,row=2, ipadx=4, sticky='W')



        TL.label7 = Tkinter.Label(TL.separator,text="Text Colour:",fg="black",bg="grey95",font=('Arial', 8 ,'bold'),justify='left')
        TL.label7.grid(column=1,row=3,  sticky='W',padx=10,ipady=10,ipadx=30)

        TL.selectedP = Tkinter.StringVar()
        TL.opt1 = Tkinter.OptionMenu(TL.separator, TL.selectedP,'Normal', 'White','Black', 'Blue', 'Steel Blue','Green','Light Green','Yellow','Orange' ,'Red',command=self.G)

        TL.opt1.config(fg="black",bg="grey90",activebackground="grey90",activeforeground="black",
                     anchor="center",relief="raised",direction='right',font=('Arial', 10))
        TL.opt1.grid(column=1,row=4,sticky='EW',padx=20,ipadx=20)
        TL.selectedP.set('Normal')



        TL.sclS = Tkinter.Scale(TL.separator, from_=10, to=2000, orient='horizontal', resolution=10, command=self.H)
        TL.sclS.grid(column=1,row=5,ipadx=27, sticky='w')
        TL.sclS.set(600)


        TL.entryVariableS = Tkinter.StringVar()
        TL.entryS = Tkinter.Entry(TL.separator,textvariable=TL.entryVariableS,
                                    fg="grey15",bg="grey90",relief="sunken",insertbackground="black",borderwidth=5,font=('Arial', 10))
        TL.entryS.grid(column=1,row=6,ipadx=20, pady=10,sticky='EW')
        TL.entryS.bind("<Return>", self.I)
        TL.entryVariableS.set(600)
#
        TL.resizable(False,False)
        TL.title('Options')

        geomPatt = re.compile(r"(\d+)?x?(\d+)?([+-])(\d+)([+-])(\d+)")
        s = self.wm_geometry()
        m = geomPatt.search(s)
        X = m.group(4)
        Y = m.group(6)

        TL.sclY.set(Y)
        TL.sclX.set(X)





    if self.selectedM.get() == 'Exit':

        self.destroy()


def F (self):


    G = round(psutil.cpu_percent(), 1)
    G1 = str(G) + '%'



    self.labelVariable.set(G1)


    if G < 5:
        self.imageLabel.configure(image=self.image0)
    if G >= 5:
        self.imageLabel.configure(image=self.image5)
    if G >= 10:
        self.imageLabel.configure(image=self.image10)
    if G >= 15:
        self.imageLabel.configure(image=self.image15)

    if G >= 20:
        self.imageLabel.configure(image=self.image20)

    if G >= 25:
        self.imageLabel.configure(image=self.image25)



    if G >= 30:
        self.imageLabel.configure(image=self.image30)

    if G >= 35:
        self.imageLabel.configure(image=self.image35)

    if G >= 40:
        self.imageLabel.configure(image=self.image40)

    if G >= 45:
        self.imageLabel.configure(image=self.image45)


    if G >= 50:
        self.imageLabel.configure(image=self.image50)

    if G >= 55:
        self.imageLabel.configure(image=self.image55)

    if G >= 60:
        self.imageLabel.configure(image=self.image60)

    if G >= 65:
        self.imageLabel.configure(image=self.image65)




    if G >= 70:
        self.imageLabel.configure(image=self.image70)

    if G >= 75:
        self.imageLabel.configure(image=self.image75)

    if G >= 80:
        self.imageLabel.configure(image=self.image80)

    if G >= 85:
        self.imageLabel.configure(image=self.image85)



    if G >= 90:
        self.imageLabel.configure(image=self.image90)

    if 100> G >= 95:
        self.imageLabel.configure(image=self.image95)

    if G == 100:
        self.imageLabel.configure(image=self.image100)

    S2 = TL.entryVariableS.get()



    self.after(int(S2), self.F)
+1  A: 

Edit:

If that if self.selectedM.get() =='Options...': statement in E() isn't satisfied, then the global variable TL is never declared which I'm quite sure is what is happening. Then, when F() tries to use TL, it doesn't exist.

Justin Peel
That won't help if `TL` really *doesn't* exist.
Ignacio Vazquez-Abrams
@Ignacio, you're right. I was testing it out after I wrote it and there wasn't a need for `global` there. I wondered that, but wasn't completely sure after writing it since I almost never use the `global` keyword.
Justin Peel
Thanks that was it. Sometimes it really helps to have someone else go over the code. Fixed it with thistry: S2 = TL.entryVariableS.get() except NameError: S2 = 650 self.after(int(S2), self.F)
Anteater7171