可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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("", 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.