Add tkinter's intvar to an integer

我怕爱的太早我们不能终老 提交于 2019-11-27 08:33:31

问题


I'm having some trouble adding a value taken from an Entry box and adding it to an existing number. In this case, I want the value of the "change speed" box to be added to the robots current speed. When run, my code produces an error:

TypeError: unsupported operand type(s) for +=: 'int' and 'IntVar'.

Below is the code that produces the entry box:

change_speed_entry = ttk.Entry(main_frame, width=5)  # Entry box for linear speed
change_speed_entry.grid()
data = tkinter.IntVar()
change_speed_entry['textvariable'] = data

And next is where I try to manipulate the result. This is a method within a class. All other methods of the class work correctly:

def changeSpeed(self, delta_speed):
    self.speed += delta_speed

回答1:


You need to first invoke the .get method of IntVar:

def changeSpeed(self, delta_speed):
    self.speed += delta_speed.get()

which returns the variable's value as an integer.

Since I don't have your full code, I wrote a small script to demonstrate:

from Tkinter import Entry, IntVar, Tk

root = Tk()

data = IntVar()

entry = Entry(textvariable=data)
entry.grid()

def click(event):
    # Get the number, add 1 to it, and then print it
    print data.get() + 1

# Bind the entrybox to the Return key
entry.bind("<Return>", click)

root.mainloop()

When you run the script, a small window appears that has an entrybox. When you type a number in that entrybox and then click Return, the script gets the number stored in data (which will be the number you typed in), adds 1 to it, and then prints it on the screen.




回答2:


You didn't show the code defining .speed or delta_speed, so I'm guessing here. Try:

    self.speed += delta_speed.get()
                             ^^^^^^

If delta_speed is an IntVar, .get() will retrieve its value as a Python int.



来源:https://stackoverflow.com/questions/19719577/add-tkinters-intvar-to-an-integer

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!