Не удалось создать мой первый динамический графический калькулятор - PullRequest
0 голосов
/ 05 мая 2018

Кто-нибудь знает, как построить динамический калькулятор, который работает следующим образом:

GUI с кнопками и 4 виджетами отображения текста (номер1, оператор, номер2, результат)

  1. Первый номер, который нужно нажать, это номер1 (добавить номер1, если несколько нажал)
  2. Далее оператор должен быть нажат (сменить оператора, если несколько нажат)
  3. Следующая цифра 2 должна быть нажата (добавьте цифру 2, если нажата несколько раз)

  4. Если нажать «=», выведите результат

  5. Если «=» не нажимается, но любой другой оператор (+ -, /, ) печатает результат и сохраняет следующий оператор, - сохраняет результат как число 1 для следующей операции *

Я новичок в программировании, и после нескольких месяцев обучения я решил создать калькулятор на Python с помощью tkinter. Я должен сказать, что до сих пор никого не просил о помощи.

Возможно, это не сработает, но ниже вы можете найти мою попытку создания моей первой программы ..:

from tkinter import *
import operator


root = Tk()

display1 = None
display2 = None

number1 = None
number2 = None
result = None
op_char = None
op_func = None
op_display = None

T_num1 = Text(root, height=2, width=30)
T_num1.pack()
T_num2 = Text(root, height=2, width=30)
T_num2.pack()
T_op = Text(root, height=2, width=30)
T_op.pack()
T_result = Text(root,height=2, width=30)
T_result.pack()

ops = {"+": operator.add,
   "-": operator.sub,
   "*": operator.mul,
   "/": operator.truediv}

def numberpush(input):

global result
global number1
global number2
global result
global op_char
global op_func
global op_display
global ops
global display1
global display2


if result != None:


    if number1 != None:

        if number2 == None:

            number2 = input
            display2 = input
            result = op_func(display1, number2)
            number1 = result
        else:
            number2.append(input)
            display2.append(input)
            T_num2.insert(END, display2)
            result = op_func(display1, display2)
            number1 = result

    else:
        number1 = result
        display2 = result
        T_num2.insert(END, display2)





elif operator_func == None:

    if number1 == None:

        number1 = input
        display1 = input
        T_num1.insert(END, display1)

    else:

        number1 = number1.append(input)
        display1.append(input)
        T_num1.insert(END, display1)


else:
    number2 = input
    display2 = input
    T_num2.insert(END, display2)

    result = op_func(number1, number2)

    number1 = result  # Set Number1 to Result

    operator_func = None  # Reset Operator to none
    op_display = None
    T_op.insert(END, op_display)


def buttonpush(input):

global result
global number1
global number2
global result
global op_char
global op_func
global op_display
global ops
global display1
global display2

if number1 == None:

    pass


elif result != None:

    # Check if Previous Calculation has been done, if so -> display the result of previous calc and save new operator

    display1 = result
    T_num1.insert(END, display1)

    number2 = None
    display2 = None
    T_num2.insert(END, display2)

    op_char = input
    op_func = ops[op_char]
    op_display = input
    T_op.insert(END, op_display)

    result = None  # Reset the Result

else:
    op_char = input
    op_func = ops[op_char]
    op_display = input
    T_op.insert(END, op_display)




def result():

global result
global number1
global number2
global result
global op_char
global op_func
global op_display
global ops
global display1
global display2

if number1 !=None and number2 != None and op_func == None:

    if result == None:

        T_result.insert(END, number1)

    else:

        T_result.insert(END, result)


elif number1 != None and op_func != None:

    T_result.insert(END, "Error")


elif number1 != None:

    T_result.insert(END, number1)

else:

     T_result.insert(END, "Waiting")







button_0 = Button(root, text="0", command=numberpush(0))
button_0.pack()

button_1 = Button(root, text="1", command=numberpush(1))
button_1.pack()

button_2 = Button(root, text="2", command=numberpush(2))
button_2.pack()

button_3 = Button(root, text="3", command=numberpush(3))
button_3.pack()

button_4 = Button(root, text="4", command=numberpush(4))
button_4.pack()

button_5 = Button(root, text="5", command=numberpush(5))
button_5.pack()

button_6 = Button(root, text="6", command=numberpush(6))
button_6.pack()

button_7 = Button(root, text="7", command=numberpush(7))
button_7.pack()

button_8 = Button(root, text="8", command=numberpush(8))
button_8.pack()

button_9 = Button(root, text="9", command=numberpush(9))
button_9.pack()

button_add = Button(root, text="+", command=buttonpush("+"))
button_add.pack()

button_subtract = Button(root, text="-", command=buttonpush("-"))
button_subtract.pack()

button_multiply = Button(root, text="*", command=buttonpush("*"))
button_multiply.pack()

button_divide = Button(root, text="/", command=buttonpush("/"))
button_divide.pack()

button_result = Button(root, text="=", command=result())
button_result.pack()



root.mainloop()
...