计算器窗口 10 但缺少 MC、M+、M-、MU 和 MR 按钮

问题描述

我实际上不知道这些按钮(MC、M+、M-、MU 和 MR)如何工作以及如何在不使用 lambda 函数的情况下操作它们我想寻求一些帮助以便我可以将其升级为实际100% 与 Windows 10 计算器相似。

这是我的代码,对我有很大帮助:

from tkinter import *
import math

full_stop = 1
for_calculation = None


def button(parent,text,font,bg,width,pad=1):
    btn = Button(parent,text=text,font=font,bg=bg,width=width,height=2,relief=FLAT,bd=0,padx=pad)
    return btn



def zero(event=""):
    if expression.get().startswith("0") and len(expression.get()) == 1:
        expression.set("")
    if len(expression.get()) < 30:
        expression.set(expression.get() + "0")


# num 1
def one(event=""):
    if expression.get().startswith("0") and len(expression.get()) == 1:
        expression.set("")
    if len(expression.get()) < 30:
        expression.set(expression.get() + "1")


# num 2
def two(event=""):
    if expression.get().startswith("0") and len(expression.get()) == 1:
        expression.set("")
    if len(expression.get()) < 30:
        expression.set(expression.get() + "2")


# num 3
def three(event=""):
    if expression.get().startswith("0") and len(expression.get()) == 1:
        expression.set("")
    if len(expression.get()) < 30:
        expression.set(expression.get() + "3")


# num 4
def four(event=""):
    if expression.get().startswith("0") and len(expression.get()) == 1:
        expression.set("")
    if len(expression.get()) < 30:
        expression.set(expression.get() + "4")


# num 5
def five(event=""):
    if expression.get().startswith("0") and len(expression.get()) == 1:
        expression.set("")
    if len(expression.get()) < 30:
        expression.set(expression.get() + "5")


# num 6
def six(event=""):
    if expression.get().startswith("0") and len(expression.get()) == 1:
        expression.set("")
    if len(expression.get()) < 30:
        expression.set(expression.get() + "6")


# num 7
def seven(event=""):
    if expression.get().startswith("0") and len(expression.get()) == 1:
        expression.set("")
    if len(expression.get()) < 30:
        expression.set(expression.get() + "7")


# num 8
def eight(event=""):
    if expression.get().startswith("0") and len(expression.get()) == 1:
        expression.set("")
    if len(expression.get()) < 30:
        expression.set(expression.get() + "8")


# num 9
def nine(event=""):
    if expression.get().startswith("0") and len(expression.get()) == 1:
        expression.set("")
    if len(expression.get()) < 30:
        expression.set(expression.get() + "9")



# add func
def add(event=""):
    global full_stop
    if len(expression.get()) < 30 and not expression.get().endswith("."):
        if expression.get().endswith("+"):
            expression.set(expression.get()[:-1] + "+")
        elif expression.get().endswith("-"):
            expression.set(expression.get()[:-1] + "+")
        elif expression.get().endswith("x"):
            expression.set(expression.get()[:-1] + "+")
        elif expression.get().endswith("÷"):
            expression.set(expression.get()[:-1] + "+")
        elif expression.get().endswith("%"):
            expression.set(expression.get()[:-1] + "+")
        elif expression.get().endswith("1/x"):
            expression.set(expression.get()[:-1] + "+")
        else:
            expression.set(expression.get() + "+")
        full_stop = 1


# subtract func
def subtract(event=""):
    global full_stop
    if len(expression.get()) < 30 and not expression.get().endswith("."):
        if expression.get().endswith("+"):
            expression.set(expression.get()[:-1] + "-")
        elif expression.get().endswith("-"):
            expression.set(expression.get()[:-1] + "-")
        elif expression.get().endswith("x"):
            expression.set(expression.get()[:-1] + "-")
        elif expression.get().endswith("÷"):
            expression.set(expression.get()[:-1] + "-")
        elif expression.get().endswith("%"):
            expression.set(expression.get()[:-1] + "-")
        elif expression.get().endswith("1/x"):
            expression.set(expression.get()[:-1] + "-")
        else:
            expression.set(expression.get() + "-")
        full_stop = 1


# multiply fuc
def multiply(event=""):
    global full_stop
    if len(expression.get()) < 30 and not expression.get().endswith("."):
        if expression.get().endswith("+"):
            expression.set(expression.get()[:-1] + "x")
        elif expression.get().endswith("-"):
            expression.set(expression.get()[:-1] + "x")
        elif expression.get().endswith("x"):
            expression.set(expression.get()[:-1] + "x")
        elif expression.get().endswith("÷"):
            expression.set(expression.get()[:-1] + "x")
        elif expression.get().endswith("%"):
            expression.set(expression.get()[:-1] + "x")
        elif expression.get().endswith("1/x"):
            expression.set(expression.get()[:-1] + "x")
        else:
            expression.set(expression.get() + "x")
        full_stop = 1


def percent(event=""):
    global full_stop
    if len(expression.get()) < 30 and not expression.get().endswith("."):
        if expression.get().endswith("+"):
            expression.set(expression.get()[:-1] + "%")
        elif expression.get().endswith("-"):
            expression.set(expression.get()[:-1] + "%")
        elif expression.get().endswith("x"):
            expression.set(expression.get()[:-1] + "%")
        elif expression.get().endswith("÷"):
            expression.set(expression.get()[:-1] + "%")
        elif expression.get().endswith("%"):
            expression.set(expression.get()[:-1] + "%")
        elif expression.get().endswith("1/x"):
            expression.set(expression.get()[:-1] + "%")
        else:
            expression.set(int(expression.get())/100)
        full_stop = 1


# divide func
def divide(event=""):
    global full_stop
    if len(expression.get()) < 30 and not expression.get().endswith("."):
        if expression.get().endswith("+"):
            expression.set(expression.get()[:-1] + "÷")
        elif expression.get().endswith("-"):
            expression.set(expression.get()[:-1] + "÷")
        elif expression.get().endswith("x"):
            expression.set(expression.get()[:-1] + "÷")
        elif expression.get().endswith("÷"):
            expression.set(expression.get()[:-1] + "÷")
        elif expression.get().endswith("%"):
            expression.set(expression.get()[:-1] + "÷")
        elif expression.get().endswith("1/x"):
            expression.set(expression.get()[:-1] + "÷")
        else:
            expression.set(expression.get() + "÷")
        full_stop = 1



def over(event=""):
    global full_stop
    if len(expression.get()) < 30 and not expression.get().endswith("."):
        if expression.get().endswith("+"):
            expression.set(expression.get()[:-1] + "1/x")
        elif expression.get().endswith("-"):
            expression.set(expression.get()[:-1] + "1/x")
        elif expression.get().endswith("x"):
            expression.set(expression.get()[:-1] + "1/x")
        elif expression.get().endswith("÷"):
            expression.set(expression.get()[:-1] + "1/x")
        elif expression.get().endswith("%"):
            expression.set(expression.get()[:-1] + "1/x")
        elif expression.get().endswith("1/x"):
            expression.set(expression.get()[:-1] + "1/x")
        else:
            expression.set(1/int(expression.get()))
        full_stop = 1

def power(event=""):
    global full_stop
    if len(expression.get()) < 30 and not expression.get().endswith("."):
        if expression.get().endswith("+"):
            expression.set(expression.get()[:-1] + "x²")
        elif expression.get().endswith("-"):
            expression.set(expression.get()[:-1] + "x²")
        elif expression.get().endswith("x"):
            expression.set(expression.get()[:-1] + "x²")
        elif expression.get().endswith("÷"):
            expression.set(expression.get()[:-1] + "x²")
        elif expression.get().endswith("%"):
            expression.set(expression.get()[:-1] + "x²")
        elif expression.get().endswith("1/x"):
            expression.set(expression.get()[:-1] + "x²")
        elif expression.get().endswith("x²"):
            expression.set(expression.get()[:-1] + "x²")
        else:
            expression.set(math.pow(int(expression.get()),2))
        full_stop = 1

def sqr(event=""):
    global full_stop
    if len(expression.get()) < 30 and not expression.get().endswith("."):
        if expression.get().endswith("+"):
            expression.set(expression.get()[:-1] + "√x")
        elif expression.get().endswith("-"):
            expression.set(expression.get()[:-1] + "√x")
        elif expression.get().endswith("x"):
            expression.set(expression.get()[:-1] + "√x")
        elif expression.get().endswith("÷"):
            expression.set(expression.get()[:-1] + "√x")
        elif expression.get().endswith("%"):
            expression.set(expression.get()[:-1] + "√x")
        elif expression.get().endswith("1/x"):
            expression.set(expression.get()[:-1] + "√x")
        elif expression.get().endswith("x²"):
            expression.set(expression.get()[:-1] + "√x")
        elif expression.get().endswith("√x"):
            expression.set(expression.get()[:-1] + "√x")
        else:
            expression.set(math.sqrt(int(expression.get())))
        full_stop = 1


def point(event=""):
    global full_stop
    if len(expression.get()) < 30 and full_stop == 1:
        if not expression.get().endswith(("+","-","x","%","÷","1/x","x²")):
            expression.set(expression.get() + ".")
            full_stop = 0





def reverse():
    if not expression.get().startswith("-") and not expression.get().startswith("0") and len(expression.get()) < 30:
        expression.set("-" + expression.get())
    elif expression.get().startswith("-"):
        expression.set(expression.get()[1:])



def delete(event=""):
    expression.set(expression.get()[:-1])
    if expression.get() == "":
        expression.set("0")



def reset(event=""):
    global for_calculation
    expression.set("0")
    for_calculation = None
    calculated.set("")


# THIS FUNCTION WILL CALCULATE THE RESULT OF THE EXPRESSION
def calculate(event=""):
    global for_calculation
    for_calculation = expression.get().replace("x","*").replace("÷","/")
    calculated.set(eval(for_calculation))
    if str(calculated.get()[int(len(calculated.get()) - 2):]) == ".0":
        calculated.set(calculated.get()[:-2])
    expression.set("0")


root = Tk()
root.title("CALCULATOR")
root.geometry("500x500")
root.resizable(0,0)
root.configure(bg="#D9D9D9")



expression = StringVar(root,"0")
calculated = StringVar(root)

expression_txt = Entry(root,textvariable=expression,justify=RIGHT,selectbackground="#D9D9D9",font="Comic-sens 15 bold",selectforeground="#000000",readonlybackground="#D9D9D9",state="readonly")
expression_txt.pack(pady=5,anchor=N,padx=2,fill=X)


calculated_lbl = Label(root,textvariable=calculated,anchor=E,bg="#D9D9D9",font="Comic-sens 20 bold")
calculated_lbl.pack(pady=5,padx=6,fill=X)


frame1 = Frame(root,bg="#D9D9D9")

btn = button(frame1,"Calibri 15","#EEEEEE",10)
btn.config(command=percent)
btn.pack(side=LEFT,padx=1,pady=1,fill=BOTH)

btn = button(frame1,"CE",10)
btn.config(command=reset)
btn.pack(side=LEFT,fill=BOTH)


btn = button(frame1,"C",10)
btn.config(command=delete)
btn.pack(side=LEFT,fill=BOTH)

btn= button(frame1,"<-",fill=BOTH)


frame1.pack(side=TOP,anchor=NW,padx=5,fill=BOTH)


frame2 = Frame(root,bg="#D9D9D9")


btn = button(frame2,10)
btn.config(command=over)
btn.pack(side=LEFT,fill=BOTH)

btn = button(frame2,"x²",10)
btn.config(command=power)
btn.pack(side=LEFT,"√x",10)
btn.config(command=sqr)
btn.pack(side=LEFT,10)
btn.config(command=divide)
btn.pack(side=LEFT,fill=BOTH)

frame2.pack(side=TOP,fill=BOTH)


frame3 = Frame(root,bg="#D9D9D9")

btn = button(frame3,"7","Calibri 15 bold","#FFFFFF",10)
btn.config(command=seven)
btn.pack(side=LEFT,fill=BOTH)

btn = button(frame3,"8",10)
btn.config(command=eight)
btn.pack(side=LEFT,"9",10)
btn.config(command=nine)
btn.pack(side=LEFT,10)
btn.config(command=multiply)
btn.pack(side=LEFT,fill=BOTH)

frame3.pack(side=TOP,fill=BOTH)


frame4 = Frame(root,bg="#D9D9D9")

btn = button(frame4,"4",10)
btn.config(command=four)
btn.pack(side=LEFT,fill=BOTH)

btn = button(frame4,"5",10)
btn.config(command=five)
btn.pack(side=LEFT,"6",10)
btn.config(command=six)
btn.pack(side=LEFT,10)
btn.config(command=subtract)
btn.pack(side=LEFT,fill=BOTH)

frame4.pack(side=TOP,fill=BOTH)


frame5 = Frame(root,bg="#D9D9D9")

btn = button(frame5,"1",10)
btn.config(command=one)
btn.pack(side=LEFT,fill=BOTH)

btn = button(frame5,"2",10)
btn.config(command=two)
btn.pack(side=LEFT,"3",10)
btn.config(command=three)
btn.pack(side=LEFT,"+",10)
btn.config(command=add)
btn.pack(side=LEFT,fill=BOTH)

frame5.pack(side=TOP,fill=BOTH)


frame6 = Frame(root,bg="#D9D9D9")

btn = button(frame6,"±",10)
btn.config(command=reverse)
btn.pack(side=LEFT,fill=BOTH)

btn = button(frame6,"0",10)
btn.config(command=zero)
btn.pack(side=LEFT,".",10)
btn.config(command=point)
btn.pack(side=LEFT,"=","#D9D9D9",10)
btn.config(command=calculate)
btn.pack(side=LEFT,fill=BOTH)

frame6.pack(side=TOP,fill=BOTH)


root.bind('0',zero)
root.bind('1',one)
root.bind('2',two)
root.bind('3',three)
root.bind('4',four)
root.bind('5',five)
root.bind('6',six)
root.bind('7',seven)
root.bind('8',eight)
root.bind('9',nine)
root.bind('+',add)
root.bind('-',subtract)
root.bind('*',multiply)
root.bind('/',divide)
root.bind('.',point)
root.bind('%',percent)
root.bind("1/x",over)
root.bind('<BackSpace>',delete)
root.bind('<Delete>',reset)
root.bind('<Return>',calculate)


root.mainloop()

我一直在用 Tkinter 为计算器做一个 python 应用程序。我想知道如何访问按钮属性,例如它们的大小、高度、宽度等,但我试图避免使用 lambda,以便我慢慢学习。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)