我正在尝试使用GUI创建基本计算器。但是我忍不住了。
错误是:"TypeError: unsupported operand type(s) for +: 'IntVar' and 'str'"
所有按钮都可以正常工作,只有'='可以解决问题。
请提供有关如何将StringVar
转换为IntVar
的想法。
这是我的代码:
import tkinter
window=tkinter.Tk()
def zero():
x.set(x.get()+'0')
def one():
x.set(x.get()+'1')
def two():
x.set(x.get()+'2')
def three():
x.set(x.get()+'3')
def four():
x.set(x.get()+'4')
def five():
x.set(x.get()+'5')
def six():
x.set(x.get()+'6')
def seven():
x.set(x.get()+'7')
def eight():
x.set(x.get()+'8')
def nine():
x.set(x.get()+'9')
def add():
a=x.get()
x.set('')
def ans():
b=x.get()
x.set(a+b)
frame=tkinter.Frame(window)
frame.pack()
x=tkinter.StringVar()
a=tkinter.IntVar()
b=tkinter.IntVar()
entry=tkinter.Entry(frame,textvariable=x)
entry.grid(row=0,column=0)
entry.pack
button0=tkinter.Button(frame,text='0',command=zero)
button0.grid(row=0,column=1)
button1=tkinter.Button(frame,text='1',command=one)
button1.grid(row=1,column=1)
button2=tkinter.Button(frame,text='2',command=two)
button2.grid(row=1,column=2)
button3=tkinter.Button(frame,text='3',command=three)
button3.grid(row=1,column=3)
button4=tkinter.Button(frame,text='4',command=four)
button4.grid(row=2,column=1)
button5=tkinter.Button(frame,text='5',command=five)
button5.grid(row=2,column=2)
button6=tkinter.Button(frame,text='6',command=six)
button6.grid(row=2,column=3)
button7=tkinter.Button(frame,text='7',command=seven)
button7.grid(row=3,column=1)
button8=tkinter.Button(frame,text='8',command=eight)
button8.grid(row=3,column=2)
button9=tkinter.Button(frame,text='9',command=nine)
button9.grid(row=3,column=3)
button9=tkinter.Button(frame,text='+',command=add)
button9.grid(row=0,column=2)
button10=tkinter.Button(frame,text='=',command=ans)
button10.grid(row=0,column=3)
window.mainloop()
答案 0 :(得分:0)
在add
和ans
函数中,您将a
和b
用作变量,而不是IntVar
。将它们更改为:
def add():
a.set(x.get())
x.set('')
def ans():
b.set(x.get())
x.set(a.get()+b.get())
答案 1 :(得分:-1)
您使用的字符串应使用数字(IntVar)。
使用数字
x=tkinter.IntVar()
a=tkinter.IntVar()
b=tkinter.IntVar()
尝试
x.set(x.get()+1)
[...]
def add():
a=x.get()
x.set(0)
def ans():
b=x.get()
x.set(a+b)
代替
x.set(x.get()+'1')