Почему мой калькулятор Tkinter выводит только 0?

#python #tkinter #calculator

#python #tkinter #калькулятор

Вопрос:

Я пытался создать простой калькулятор на python, используя модуль Tkinter, и все, что он делает, это отображает 0. Вот код:

 import tkinter as tk
window = tk.Tk()
calclabel = tk.Label(text = "This is a calculator.nType yor numbers in the space given below and click on any on the operators to carry out the operation.")
calclabel.pack()
entry1 = tk.Entry()
entry1.pack()
entry2 = tk.Entry()
entry2.pack()
a = int()
b = int()
entry1.get = a
entry2.get = b
def addcommand () :
    addlabel = tk.Label(text = a b)
    addlabel.pack()

def subcommand () :
    sublabel = tk.Label(text = a-b)
    sublabel.pack()

def multicommand () :
    multilabel = tk.Label(text = a*b)
    multilabel.pack()

def divicommand () :
    divilabel = tk.Label(text = a/b)
    divilabel.pack()

add = tk.Button(text = "Add",
                command = addcommand,
                master = window)
add.pack()

sub = tk.Button(text = "Substract",
                command = subcommand,
                master = window)
sub.pack()

mul = tk.Button(text = "Multiply",
                command = multicommand,
                master = window)
mul.pack()

div = tk.Button(text = "Divide",
                command = divicommand,
                master = window)
div.pack()
 

Буду признателен за любую помощь, потому что я думаю, что это логическая ошибка, и я не могу ее понять.

Ответ №1:

Кажется, вы делаете это неправильно. Каждый раз, когда вы выполняете какие command -либо действия, вы должны получить значение из entry , а затем вычислить. Как показано ниже

 def addcommand () :
    a = int(entry1.get()) # get the value from entry1 and cast it to integer
    b = int(entry2.get()) # get the value from entry1 and cast it to integer
    addlabel = tk.Label(text = a b) # do the calculation
    addlabel.pack()
 

Вы можете использовать try except блок во время кастинга для обработки exception .

Вот как вы можете это сделать

 import tkinter as tk
window = tk.Tk()
calclabel = tk.Label(text = "This is a calculator.nType yor numbers in the space given below and click on any on the operators to carry out the operation.")
calclabel.pack()
entry1 = tk.Entry()
entry1.pack()
entry2 = tk.Entry()
entry2.pack()
# a = int()
# b = int()
# entry1.get = a
# entry2.get = b
def addcommand () :
    a = int(entry1.get())
    b = int(entry2.get())
    addlabel = tk.Label(text = a b)
    addlabel.pack()

def subcommand () :
    a = int(entry1.get())
    b = int(entry2.get())
    sublabel = tk.Label(text = a-b)
    sublabel.pack()

def multicommand () :
    a = int(entry1.get())
    b = int(entry2.get())
    multilabel = tk.Label(text = a*b)
    multilabel.pack()

def divicommand () :
    a = int(entry1.get())
    b = int(entry2.get())
    divilabel = tk.Label(text = a/b)
    divilabel.pack()

add = tk.Button(text = "Add",
                command = addcommand,
                master = window)
add.pack()

sub = tk.Button(text = "Substract",
                command = subcommand,
                master = window)
sub.pack()

mul = tk.Button(text = "Multiply",
                command = multicommand,
                master = window)
mul.pack()

div = tk.Button(text = "Divide",
                command = divicommand,
                master = window)
div.pack()

tk.mainloop()
 

Комментарии:

1. Может быть, может быть полезно немного больше комментариев, чем просто «кажется, вы делаете это неправильно» — что вы изменили в своем ответе?

2. Каждый раз, когда вы вызываете одну из этих команд, вы все равно создаете новую метку. Если OP явно не заявляет, что он хочет вести журнал всех прошлых вычислений, было бы лучше сообщить, что у вас должен быть третий объект tkinter, который вы обновляете с результатом вычисления каждый раз.

3. Большое вам спасибо! Теперь он работает отлично!

4. @ArjunSharma Не забудьте принять ответ 😉