Search code examples
pythontkintertkinter-entry

tkinter new class can't use .get()/float()


I have defined a new Entry subclass: NewEntry, but it can't get the numbers which are put in it. How can I fix this?

When I click the button, the error message is showed:

ValueError: could not convert string to float:
from Tkinter import *
root = Tk()                                                                                                                              

class NewEntry(Entry):
    def __init__(self,parent,cusdef='1'):      #Initiation default number is '1'                                      
        Entry.__init__(self,parent)
        self.cusdef = cusdef
        v=StringVar()
        v.set(self.cusdef)
        self = Entry(self,textvariable=v)
        self.pack()
        return

def GetNum():
    a=e.get()
    print float(a)
    return

e = NewEntry(root)
e.pack(fill='x')

button = Button(root,command=GetNum)
button.pack(fill='x')
root.mainloop()

Solution

  • You seem to be trying to initialize your Entry subclass here:

    self = Entry(self,textvariable=v)
    self.pack()
    

    But instead, you're merely overwriting the variable called self and creating a new Entry which gets discarded.

    Instead you need to do the Entry.__init__ call once, with the correct arguments:

    class NewEntry(Entry):
        def __init__(self,parent,cusdef='1'):
            self.cusdef = cusdef
            v=StringVar()
            v.set(self.cusdef)
            Entry.__init__(self,parent, textvariable=v)
            self.pack()
            return