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

如何解决计算器窗口 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,以便我慢慢学习。

解决方法

您的问题是关于使用内存的函数,因此您需要为记忆值实现存储:

full_stop = 1
for_calculation = None
memory = None
  • 按下 M+ 时,您将操作的当前项(“可见”值)添加到内存中(或者用新值替换初始的 None)。
  • 当按下 M- 时,您从内存中减去当前术语(或用负数替换初始的 None)。
  • 使用 MR,您可以回忆记忆,这意味着您将当前术语替换为 记忆值。
  • 使用 MC,您可以清除内存,将其当前值替换为 None。

MU 键有点复杂,这里有一个 link 解释它的作用。

我不确定,但您当前的实现中可能缺少存储当前术语(“可见”值)的变量。在这种情况下,您应该添加一个以避免每次需要时都从整个表达式中提取该术语。

最后,您可以通过使可能的内容通用来缩短代码,例如:

def num(stringNumber,even=""):
    if expression.get().startswith("0") and len(expression.get()) == 1:
        expression.set("")
    if len(expression.get()) < 30:
        expression.set(expression.get() + stringNumber)

def zero(even=""): num("0",even)
def one(even=""): num("1",even)
def two(even=""): num("2",even)
#and so on


    
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res