Handling TclErrors in Python

Posted by anteater7171 on Stack Overflow See other posts from Stack Overflow or by anteater7171
Published on 2010-06-13T20:18:35Z Indexed on 2010/06/13 20:22 UTC
Read the original article Hit count: 605

Filed under:
|
|

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

© Stack Overflow or respective owner

Related posts about python

Related posts about error-handling