views:

52

answers:

1

In the following code I'll get the following error if I right click the window that pops up. Then go down to the very bottom entry widget then delete it's contents. It seems to be giving me a TclError. How do I go about handeling such an error?

The Error

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python26\Lib\lib-tk\Tkinter.py", line 1410, in __call__
    return self.func(*args)
  File "C:\Python26\CPUDEMO.py", line 503, in I
    TL.sclS.set(S1)
  File "C:\Python26\Lib\lib-tk\Tkinter.py", line 2765, in set
    self.tk.call(self._w, 'set', value)
TclError: expected floating-point number but got ""

The Code

        #F

    #PIthon.py


    # Import/Setup

    import Tkinter
    import psutil,time
    import re

    from PIL import Image, ImageTk
    from time import sleep


    class simpleapp_tk(Tkinter.Tk):
        def __init__(self,parent):
            Tkinter.Tk.__init__(self,parent)
            self.parent = parent
            self.initialize()

        def initialize(self):

# Widgets



        self.menu = Tkinter.Menu(self, tearoff = 0 )
        M = [ "Options...", "Exit"]
        self.selectedM = Tkinter.StringVar()

        self.menu.add_radiobutton( label = 'Hide', variable = self.selectedM, command = self.E )
        self.menu.add_radiobutton( label = 'Bump', variable = self.selectedM, command = self.E )
        self.menu.add_separator()
        self.menu.add_radiobutton( label = 'Options...', variable = self.selectedM, command = self.E )
        self.menu.add_separator()
        self.menu.add_radiobutton( label = 'Exit', variable = self.selectedM, command = self.E )





        self.frame1 = Tkinter.Frame(self,bg='grey15',relief='ridge',borderwidth=4,width=185, height=39)
        self.frame1.grid()
        self.frame1.grid_propagate(0)
        self.frame1.bind( "<Button-3><ButtonRelease-3>", self.D )
        self.frame1.bind( "<Button-2><ButtonRelease-2>", self.C )
        self.frame1.bind( "<Double-Button-1>", self.C )









        self.labelVariable = Tkinter.StringVar()
        self.label = Tkinter.Label(self.frame1,textvariable=self.labelVariable,fg="lightgreen",bg="grey15",borderwidth=1,font=('arial', 10, 'bold'))
        self.label.grid(column=1,row=0,columnspan=1,sticky='nsew')

        self.label.bind( "<Button-3><ButtonRelease-3>", self.D )
        self.label.bind( "<Button-2><ButtonRelease-2>", self.C )
        self.label.bind( "<Double-Button-1>", self.C )
        self.F()

        self.overrideredirect(1)
        self.wm_attributes("-topmost", 1)



        global TL1
        TL1 = Tkinter.Toplevel(self)
        TL1.wm_geometry("+0+5000")
        TL1.overrideredirect(1)

        TL1.button = Tkinter.Button(TL1,text="? CPU",fg="lightgreen",bg="grey15",activeforeground="lightgreen", activebackground='grey15',borderwidth=4,font=('Arial', 8, 'bold'),command=self.J)
        TL1.button.pack(ipadx=1)



# Events

    def Reset(self):

        self.label.configure(font=('arial', 10, 'bold'),fg='Lightgreen',bg='grey15',borderwidth=0)
        self.labela.configure(font=('arial', 8, 'bold'),fg='Lightgreen',bg='grey15',borderwidth=0)
        self.frame1.configure(bg='grey15',relief='ridge',borderwidth=4,width=224, height=50)
        self.label.pack(ipadx=38)




    def helpmenu(self):


        t2 = Tkinter.Toplevel(self)
        Tkinter.Label(t2, text='This is a help menu',
              anchor="w",justify="left",fg="darkgreen",bg="grey90",relief="ridge",borderwidth=5,font=('Arial', 10)).pack(fill='both', expand=1)
        t2.resizable(False,False)
        t2.title('Help')



        menu = Tkinter.Menu(self)
        t2.config(menu=menu)

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

        filemenu.add_command(label="Exit", command=t2.destroy)

    def aboutmenu(self):


        t1 = Tkinter.Toplevel(self)
        Tkinter.Label(t1, text=' About:\n\n CPU Usage v1.0\n\n Publisher: Drew French\n Date: 05/09/10\n Email: [email protected] \n\n\n\n\n\n\n Written in Python 2.6.4',
              anchor="w",justify="left",fg="darkgreen",bg="grey90",relief="sunken",borderwidth=5,font=('Arial', 10)).pack(fill='both', expand=1)
        t1.resizable(False,False)
        t1.title('About')

        menu = Tkinter.Menu(self)
        t1.config(menu=menu)

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

        filemenu.add_command(label="Exit", command=t1.destroy)


    def A (self,event):

        TL.entryVariable1.set(TL.sclY.get())
        TL.entryVariable2.set(TL.sclX.get())

        Y = TL.sclY.get()
        X = TL.sclX.get()


        self.wm_geometry("+" + str(X) + "+" + str(Y))


    def B(self,event):

        Y1 = TL.entryVariable1.get()
        X1 = TL.entryVariable2.get()

        self.wm_geometry("+" + str(X1) + "+" + str(Y1))
        TL.sclY.set(Y1)
        TL.sclX.set(X1)

    def C(self,event):

        s = self.wm_geometry()
        geomPatt = re.compile(r"(\d+)?x?(\d+)?([+-])(\d+)([+-])(\d+)")

        m = geomPatt.search(s)
        X3 = m.group(4)
        Y3 = m.group(6)

        M = int(Y3) - 150

        P = M + 150



        while Y3 > M:
            sleep(0.0009)
            Y3 = int(Y3) - 1
            self.update_idletasks()
            self.wm_geometry("+" + str(X3) + "+" + str(Y3))


        sleep(2.00)

        while Y3 < P:
            sleep(0.0009)
            Y3 = int(Y3) + 1
            self.update_idletasks()
            self.wm_geometry("+" + str(X3) + "+" + str(Y3))



    def D(self, event=None):
        self.menu.post( event.x_root, event.y_root )


    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'))
            TL.label7.grid(column=1,row=3,stick="W",ipady=10)

            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.label7 = Tkinter.Label(TL.separator,text="Refresh Rate:",fg="black",bg="grey95",font=('Arial', 8 ,'bold'))
            TL.label7.grid(column=1,row=5,stick="W",ipady=10)

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


            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=7,ipadx=20, pady=10,sticky='EW')
            TL.entryS.bind("<Return>", self.I)
            TL.entryVariableS.set(650)

##############

            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()

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

            s = self.wm_geometry()
            geomPatt = re.compile(r"(\d+)?x?(\d+)?([+-])(\d+)([+-])(\d+)")

            m = geomPatt.search(s)
            X3 = m.group(4)
            Y3 = m.group(6)

            M = int(Y3) - 150

            P = M + 150



            while Y3 > M:
                sleep(0.0009)
                Y3 = int(Y3) - 1
                self.update_idletasks()
                self.wm_geometry("+" + str(X3) + "+" + str(Y3))


            sleep(2.00)

            while Y3 < P:
                sleep(0.0009)
                Y3 = int(Y3) + 1
                self.update_idletasks()
                self.wm_geometry("+" + str(X3) + "+" + str(Y3))









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



            s = self.wm_geometry()
            geomPatt = re.compile(r"(\d+)?x?(\d+)?([+-])(\d+)([+-])(\d+)")

            m = geomPatt.search(s)
            X3 = m.group(4)
            Y3 = m.group(6)

            M = int(Y3) + 5000






            self.update_idletasks()
            self.wm_geometry("+" + str(X3) + "+" + str(M))



            TL1.wm_geometry("+0+190")




    def F (self):




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



        self.labelVariable.set(G1)




        try:
            S2 = TL.entryVariableS.get()

        except ValueError, e:
            S2 = 650

        except NameError:
            S2 = 650
        self.after(int(S2), self.F)










    def G (self,event):

        if TL.selectedP.get() =='Normal':
            self.label.config( fg = 'lightgreen' )
            TL1.button.config( fg = 'lightgreen',activeforeground='lightgreen')


        if TL.selectedP.get() =='Red':
            self.label.config( fg = 'red' )
            TL1.button.config( fg = 'red',activeforeground='red')


        if TL.selectedP.get() =='Orange':
            self.label.config( fg = 'orange')
            TL1.button.config( fg = 'orange',activeforeground='orange')


        if TL.selectedP.get() =='Yellow':
            self.label.config( fg = 'yellow')
            TL1.button.config( fg = 'yellow',activeforeground='yellow')


        if TL.selectedP.get() =='Light Green':
            self.label.config( fg = 'lightgreen' )
            TL1.button.config( fg = 'lightgreen',activeforeground='lightgreen')


        if TL.selectedP.get() =='Normal':
            self.label.config( fg = 'lightgreen' )
            TL1.button.config( fg = 'lightgreen',activeforeground='lightgreen')


        if TL.selectedP.get() =='Steel Blue':
            self.label.config( fg = 'steelblue1' )
            TL1.button.config( fg = 'steelblue1',activeforeground='steelblue1')


        if TL.selectedP.get() =='Blue':
            self.label.config( fg = 'blue')
            TL1.button.config( fg = 'blue',activeforeground='blue')


        if TL.selectedP.get() =='Green':
            self.label.config( fg = 'darkgreen' )
            TL1.button.config( fg = 'darkgreen',activeforeground='darkgreen')



        if TL.selectedP.get() =='White':
            self.label.config( fg = 'white' )
            TL1.button.config( fg = 'white',activeforeground='white')


        if TL.selectedP.get() =='Black':
            self.label.config( fg = 'black')
            TL1.button.config( fg = 'black',activeforeground='black')

    def H (self,event):


        TL.entryVariableS.set(TL.sclS.get())

        S = TL.sclS.get()

    def I (self,event):

        S1 = TL.entryVariableS.get()


        TL.sclS.set(S1)

        TL.sclS.set(TL.sclS.get())

        S1 = TL.entryVariableS.get()


        TL.sclS.set(S1)


    def J (self):
        s = self.wm_geometry()
        geomPatt = re.compile(r"(\d+)?x?(\d+)?([+-])(\d+)([+-])(\d+)")

        m = geomPatt.search(s)
        X3 = m.group(4)
        Y3 = m.group(6)

        M = int(Y3) - 5000






        self.update_idletasks()
        self.wm_geometry("+" + str(X3) + "+" + str(M))


        TL1.wm_geometry("+0+5000")





# Loop

if __name__ == "__main__":
    app = simpleapp_tk(None)
    app.mainloop()
A: 
def I (self,event):
    S1 = TL.entryVariableS.get()
    TL.sclS.set(S1)
    TL.sclS.set(TL.sclS.get())
    S1 = TL.entryVariableS.get()
    TL.sclS.set(S1)

TL.entryVariableS.get() is returning "" (empty string); you will need to check for that and handle them appropriately (either gives default value or complain to the user).

Lie Ryan