Python Gui计算器,我应该如何强制操作数在它们之间处理数字变量?

2024-04-24 22:08:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个图形用户界面计算器工作两个数字,现在我想添加第三个数字。我用加法运算,然后用乘法运算。。然后加上许多数字,然后在加法或乘法之后进行减法/除法。现在,如果我试图让它变得更复杂一点,我会感到困惑,因为我可能设置错了。在

逻辑是这样的: 6*6-1(windows上的计算器不执行操作顺序) 但在我的剧本里

6首先存储为evar。在

然后,multiply函数由*按钮调用。在

multiply函数将evar附加到名为FirstNumber的列表中。在

第二个evar现在存储在evar中。在

divide函数由/按钮调用。在

divide中的逻辑是将evar设置为FirstNumber。在

第二个六是第一个数。在

但是,由于firstNumber是一个列表,所以这两个值的和是12。不过,我希望是36岁。 如果我现在在计算器上减去1,我希望它是35,但逻辑上应该是11。在

列表不知道数字之间有什么操作数,有人能告诉我一个方法吗?在

import sys
import os
from tkinter import *
from operator import mul


class Calculator():    
    def __init__(self):
        self.root = Tk()

        self.root.title("Calculator")

        self.frame1 = Frame(self.root)
        self.frame2 = Frame(self.root)
        self.frame3 = Frame(self.root)
        self.frame4 = Frame(self.root)
        self.frame5 = Frame(self.root)

        self.frame1.pack(side=TOP)
        self.frame2.pack(side=TOP)
        self.frame3.pack(side=TOP)
        self.frame4.pack(side=TOP)
        self.frame5.pack(side=TOP)

        self.evar = StringVar()

        self.evar.trace("w", self.callback)
        self.ent = Entry(self.frame1, textvariable = self.evar).pack(side=LEFT, padx = 10, pady= 10)

        self.button7 = Button(self.frame2, text="7", bg="white", fg="black", bd=20, command=lambda : self.append_button(7))
        self.button7.pack(side=LEFT)
        self.button8 = Button(self.frame2, text="8", bg="white", bd=20, fg="black", relief="raised", command=lambda : self.append_button(8))
        self.button8.pack(side=LEFT)
        self.button9 = Button(self.frame2, text = "9", bg="white", bd=20, fg="black", relief="raised", command=lambda : self.append_button(9))
        self.button9.pack(side=LEFT)
        self.Divbutton = Button(self.frame2, text = "/", bg="white", bd=20, fg="black", relief="raised", command= self.divide)
        self.Divbutton.pack(side=LEFT)
        self.button4 = Button(self.frame3, text="4", bg="white", bd=20, fg="black", relief="raised", command=lambda : self.append_button(4))
        self.button4.pack(side=LEFT)
        self.button5 = Button(self.frame3, text="5", bg="white", bd=20, fg="black", relief="raised", command=lambda : self.append_button(5))
        self.button5.pack(side=LEFT)
        self.button6 = Button(self.frame3, text = "6", bg="white", bd=20, fg="black", relief="raised", command=lambda : self.append_button(6))
        self.button6.pack(side=LEFT)
        self.MultiplyButton = Button(self.frame3, text = "*", bg="white", bd=20, fg="black", relief="raised", command = self.multiply).pack(side=LEFT)
        self.button1 = Button(self.frame4, text="1", bg="white", bd=20, fg="black", relief="raised", command=lambda : self.append_button(1))
        self.button1.pack(side=LEFT)
        self.button2 = Button(self.frame4, text="2", bg="white", bd=20, fg="black", relief="raised", command=lambda : self.append_button(2))
        self.button2.pack(side=LEFT)
        self.button3 = Button(self.frame4, text = "3", bg="white", bd=20, fg="black", relief="raised", command=lambda : self.append_button(3))
        self.button3.pack(side=LEFT)
        self.SubtractButton = Button(self.frame4, text = "-", bg="white", bd=20, fg="black", relief="raised", command = self.subtract).pack(side=LEFT)
        self.button0 = Button(self.frame5, text = "0", bg="white", bd=20).pack(side=LEFT)
        self.Clear = Button(self.frame5, text = "C", bg="white", fg="black", bd=20, command = self.clear).pack(side=LEFT)
        self.AddButton = Button(self.frame5, text = "+", bg="white", bd=20, command = self.add).pack(side=LEFT)
        self.EqualsButton = Button(self.frame5, text ="=", bg="white", bd=20, command = self.equals_button)
        self.EqualsButton.pack(side=LEFT)

        self.button = ""
        self.total = 0
        self.firstNumber = []
        self.operand = ""
        self.root.mainloop
        self.count = 0
        self.multiplyValue = 0

    def clear(self):
        self.evar.set("")
        self.firstNumber = []
        return self.firstNumber

    def callback(self, *args):
        print("Entry now %s" % self.evar.get())

    def add(self):
        self.firstNumber.append(int(self.evar.get()))
        self.evar.set("")
        self.operand = "+"

    def subtract(self):
        self.firstNumber.append(int(self.evar.get()))
        self.evar.set("")
        self.operand = "-"

    def multiply(self):
        self.firstNumber.append(int(self.evar.get()))
        self.evar.set("")
        self.operand = "*"

    def divide(self):
        self.firstNumber.append(int(self.evar.get()))
        self.evar.set("")
        self.operand = "/"

    def create_button(self):
        buttons = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

    def append_button(self, val):
        self.evar.set(self.evar.get() + str(val))

    #when equals is presssed, perform a calculation based on the operand
    def equals_button(self):
        if self.operand == "+":
            self.firstNumber.append(int(self.evar.get()))
            result = sum(self.firstNumber)
        elif self.operand == "-":
            result = sum(self.firstNumber) - int(self.evar.get()) 
        elif self.operand == "*":
            self.multiplyValue = 1
            for x in self.firstNumber:
                self.multiplyValue *= x
            result = self.multiplyValue * int(self.evar.get()) 
        elif self.operand == "/":
            result = sum(self.firstNumber) / int(self.evar.get()) 
        self.evar.set(result)


Calc = Calculator()

Tags: textselfbuttonleftsidebdcommandpack