2014-02-08 3 views
0

Я пытаюсь использовать Tkinterface для создания простого калькулятора, который добавляет, вычитает, умножает и делит, но у меня есть проблема, когда я пытаюсь выполнить свою программу, я получаю эту ошибку:TypeError: неподдерживаемый тип операндов для +: 'instance' и 'instance' Python 2.7

TypeError: неподдерживаемый тип операнда (ы) для +: «например» и «например»

у меня лично не знаю, почему это происходит, я оглядывались вокруг и находили проблемы с похожими ошибками, но не с «экземпляром» и «экземпляром». Вот мой код:

#!/usr/bin/python2.7 

#Imports necessary modules 

from Tkinter import * 
#import Tkinter.messagebox 
import time as t 
import os 

#End of importing 

#Defines interface 

calc = Tk() 
calc.title("GUI Calculator") 
calc.geometry("500x350+200+200") 

#End of interface definition 

#Defines methods 

def add(val1, val2): 
    global ans 
    ans = int(val1 + val2) 
    return ans 

def sub(val1, val2): 
    global ans 
    ans = int(val1 - val2) 
    return ans 

def mul(val1, val2): 
    global ans 
    ans = int(val1 * val2) 
    return ans 

def div(val1, val2): 
    global ans 
    ans = float(val1 % val2) 
    return ans 

#End of method defining 

#Heading 
but1Text = StringVar() 
but1Text.set("Welcome to the GUI Calculator") 
label1 = Label(calc, textvariable=but1Text, height=2) 
label1.pack() 

#Instruction 1 
but2Text = StringVar() 
but2Text.set("Enter value number one!") 
label2 = Label(calc, textvariable=but2Text, height=2) 
label2.pack() 

#Val 1 input 
num1 = IntVar() 
val1 = Entry(calc, textvariable=num1) 
val1.pack() 

#Instruction 2 
but3Text = StringVar() 
but3Text.set("Enter value number one!") 
label3 = Label(calc, textvariable=but2Text, height=2) 
label3.pack() 

#Val 2 input 
num2 = IntVar() 
val2 = Entry(calc, textvariable=num2) 
val2.pack() 

#Operation selector 

but4Text = StringVar() 
but4Text.set(None) 
operator = Radiobutton(calc, text = "Addition", value = "Add", variable = but4Text,command = add(val1,val2)).pack() 
operator = Radiobutton(calc, text = "Subtract", value = "Sub", variable = but4Text,command = sub(val1,val2)).pack() 
operator = Radiobutton(calc, text = "Multiply", value = "Mul", variable = but4Text,command = mul(val1,val2)).pack() 
operator = Radiobutton(calc, text = "Divide", value = "Div", variable = but4Text,command = div(val1,val2)).pack() 

#Answer 
but5Text = StringVar() 
but5Text.set("Answer=") 
label4 = Label(calc, textvariable=but5Text, height=2) 
label4.pack() 

#Answer 
but6Text = StringVar() 
but6Text.set(ans) 
label5 = Label(calc, textvariable=but6Text, height=2) 
label5.pack() 

#Mainloop 
calc.mainloop() 

Вот полная ошибка:

Traceback (most recent call last): 
    File "./tkCalc.py", line 76, in <module> 
    operator = Radiobutton(calc, text = "Addition", value = "Add", variable = but4Text,command = add(val1,val2)).pack() 
    File "./tkCalc.py", line 24, in add 
    ans = int(val1 + val2) 
TypeError: unsupported operand type(s) for +: 'instance' and 'instance' 
+0

Просьба предоставить полную информацию о трассировке – Totem

+2

'val1' и' val2' являются объектами Entry. Почему вы ожидаете, что 'val1 + val2' будет работать? – user2357112

+0

Я хочу, чтобы пользователь вводил 2 значения и использовал их в качестве чисел для калькулятора. – Hansmoehansen

ответ

2

Вы должны выполнить свои операции на числовое значение, (целое или с плавающей точкой), текст в случаях управления , а не сами элементы управления.

Try:

def add(num1, num2): 
    global ans 
    ans = int(num1.get() + num2.get()) 
    return ans 

и

operator = Radiobutton(calc, text = "Addition", value = "Add", variable = but4Text,command = add(num1, num2)).pack() 

Так что ваша кнопка добавления передает переменные и функция получает значения от них.

+0

Прошу прощения, но я полуновинка Python, так что вы могли бы объяснить мне, что я изменил бы? – Hansmoehansen

+1

@ Хансмоэхансен расширил ответ. –

+0

Спасибо, я попробую! – Hansmoehansen

Смежные вопросы