Python制作计算器并常见问题解答


首先给出完整代码:

from tkinter import *

tk = Tk() #主窗口

frame = Frame( tk ) #窗体·布局
frame.pack() # 默认side = TOP 置于最上方

#创建控件
label = Label(frame)
entry = Entry(frame)
button = Button( frame, text = "equals to", command = lambda: calc() )

#控件布局
label.pack( side = LEFT ) # 置于左侧
entry.pack() # 默认side = TOP 置于最上方
button.pack( side = RIGHT ) # 置于右侧

#表达式
expression =  StringVar()
entry[ "textvariable" ] =  expression #表达式由entry输入
entry.focus() #输入光标闪烁

frame.mainloop() #运行,要放在主程序的最后

#公式
def calc():
    result =  "=" + str( eval( expression.get() ) )
    label.config( text = result )

 一步步对代码进行思路分析和解释。写代码第一要紧是要知道目的是什么,是搭建一个计算器然后运行它;其次才是,如何实现输入、计算和输出。

利用tkinter库搭建窗口和窗体,利用Label标签、Entry文本框、Button按键,这三个控件,分别完成输出、输入和公式运行。

#屏显式计算器编写思路:
#载入
#主窗口
#窗体·布局
···
#运行

#将下面内容插入···中
#控件·布局
#公式·表达式
#表达式
#根据上面的思路写出代码如下:

from tkinter import * #载入
tk = Tk() #主窗口
frame = Frame( tk ) #窗体·布局
frame.pack() # pack是对控件的布局 # 默认pack(side = TOP) 置于最上方
···
frame.mainloop() #运行


#将下面插入···中

#控件·布局
label = Label(frame)
entry = Entry(frame)
button = Button(frame, text = "equals to", command = lambda:calc() ) #calc()是接下来要定义的公式

label.pack( side = LEFT )
entry.pack()
button.pack( side = RIGHT )


#公式·表达式
def calc():
    result =  "=" + str( eval( expression.get() ) )
    label.config( text = result ) #结果显示在label上


#表达式
expression = StringVar()
entry[ "textvariable" ] = expression #表达式由entry输入
entry.focus() #输入光标闪烁
#公式解释

def calc():
    result =   "=" + str( eval( expression.get() ) ) 
    # " = " + 获取get→表达式expression→计算表达式eval→转为字符串str
    label.config( text = result ) 
    #结果显示在label上

#公式结果展示在label上
#公式输入显示在entry上(见下方表达式解释)
#公式应用在button上


#表达式解释
expression = StringVar() #输入字符串
entry[ "textvariable" ] = expression #转化为entry控件的文字变量
entry.focus() #entry控件输入光标闪烁

#公式结果展示在label上
#公式输入显示在entry上
#公式应用在button上 

补充:

entry = Entry(frame)
expression = StringVar()
entry["textvariable"] = expression

#textvariable是Entry控件的参数,表示文本框的值,是一个StringVar()对象,由此可改写为

expression = StringVar()
entry = Entry( frame, textvariable = expression )

参考文献:

Tkinter Entry控件_微学苑
http://www.weixueyuan.net/a/594.html

https://blog.csdn.net/weixin_40041218/article/details/80868521

常见错误:

关于函数的常见错误:

  • 如果使用lambda匿名函数,command = lambda : fun() 必须要有括号,否则表达式计算不会出结果;并且如果使用lambda匿名函数公式顺序就没关系,放在前后都可以。
  • 如果没有使用lambda匿名函数,则command = fun() 不能有括号,并且函数 fun() 的顺序要放在调用该公式的控件的前面。

其他常见错误:

  • 注释的写法规范,当使用括号时容易出错,不要把#放在还没写完的一段代码的右括号前面
  • def fun() : 冒号不能少
  • 每段换行后,空行之间的空格要检查好
  • Python不同于R软件,编号规则和循环语句写法都不同,两者切换要留心
  • 如果a,b是数值变量, 则&,|表示位运算, and,or则依据是否非0来决定输出
  • frame.mainloop()要写在主程序的最后,否则会报错:
    AttributeError: 'NoneType' object has no attribute '_root'

致谢:

Q. Why is the Son of God called “Jesus,”  meaning “savior”?
A. Because he saves us from our sins, and because salvation should not be sought and cannot be found in anyone else.
Either Jesus is not a perfect savior, or those who in true faith accept this savior have in him all they need for their salvation.

如果有什么地方没检查出错误,请指正;如果有可以优化的地方,欢迎多多指教。谢谢你们。

猜你喜欢

转载自blog.csdn.net/weixin_42683052/article/details/116429443