前言:
现时同学们对“tkinter做计算器”大致比较注重,各位老铁们都想要学习一些“tkinter做计算器”的相关知识。那么小编在网络上搜集了一些关于“tkinter做计算器””的相关内容,希望我们能喜欢,你们快快来了解一下吧!控件的学习进行到一定程度之后,就可以开始编写简单的应用了。我们的第一个应用是一个简易计算器。先看动画:
视频加载中...
首先是构建显示区。这个显示区实际上是由一大一小两个Label控件构成的:
ftTimes12 = Font(family='Times', size=12, weight=BOLD)# create a label to change state.upper_display = Label(root, background="#a0ffa0",foreground="#000000", font=ftTimes12, width=24, anchor=E)upper_display.grid(row=0, column=0, columnspan=4, sticky=E+W)# create fontftTimes24 = Font(family='Times', size=24, weight=BOLD)# create a label to change state.lower_display = Label(root, background="#a0ffa0",foreground="#000000", font=ftTimes24, width=12, anchor=E)lower_display.grid(row=1, column=0, columnspan=4, sticky=E+W)
clear_result是一个共通函数。它首先判断是否刚刚完成计算,如果答案是肯定的,就会清除所有显示内容。
# 如果是刚刚完成计算,者接下来的任何操作都清楚所有显示内容def clear_result(): upper = upper_display.cget('text') if len(upper) > 0 and upper[len(upper) - 1] == '=': clear() return True else: return False
CE按钮的动作实际上是清除当前操作数:
# 清除操作数def clear_lower(): clear_result() lower_display.config(text='')# CE按钮.Button(root, text="CE", width=2, command=clear_lower).grid(row=2, column=0, sticky=E+W)
C按钮的动作是清除所有显示内容:
# 清除所有显示内容def clear(): upper_display.config(text='') lower_display.config(text='')# C按钮Button(root,text="C", width=2, command=clear).grid(row=2, column=1, sticky=E+W)
如果不是计算完成状态,则Back按钮的功能是去掉当前操作数的最后一个字符;如果是计算完成状态,这Back按钮的功能是清除所有显示.
#如果不是计算完成状态,去掉当前操作数的最后一个字符def back(): if not clear_result(): lower = str(lower_display.cget('text')) if len(lower) > 0: lower_display.config(text=lower[:len(lower)-1])# back button.Button(root,text="<-", width=2, command=back).grid(row=2, column=2, sticky=E+W)
接下来的四则运算符使用同一个命令函数,具体参数通过lambda表达式指定。这样就避免了为每个运算符按钮编写一个命令函数。
def add_op(op): clear_result() upper = upper_display.cget('text') lower = lower_display.cget('text') if len(lower)>0: upper_display.config(text=upper + lower + op) lower_display.config(text='')# change state button.Button(root,text="÷", width=2, command=lambda : add_op('÷')).grid(row=2, column=3, sticky=E+W)Button(root,text="×", width=2, command=lambda : add_op('×')).grid(row=3, column=3, sticky=E+W)Button(root,text="-", width=2, command=lambda : add_op('-')).grid(row=4, column=3, sticky=E+W)
数字按钮也一样:
def add_number(n): clear_result() lower = lower_display.cget('text') lower_display.config(text=lower + n)# change nubmer button.Button(root, text="7", width=2, command=lambda : add_number('7')).grid(row=3, column=0, sticky=E+W)Button(root, text="8", width=2, command=lambda : add_number('8')).grid(row=3, column=1, sticky=E+W)Button(root, text="9", width=2, command=lambda : add_number('9')).grid(row=3, column=2, sticky=E+W)Button(root, text="4", width=2, command=lambda : add_number('4')).grid(row=4, column=0, sticky=E+W)Button(root, text="5", width=2, command=lambda : add_number('5')).grid(row=4, column=1, sticky=E+W)Button(root, text="6", width=2, command=lambda : add_number('6')).grid(row=4, column=2, sticky=E+W)Button(root, text="1", width=2, command=lambda : add_number('1')).grid(row=5, column=0, sticky=E+W)Button(root, text="2", width=2, command=lambda : add_number('2')).grid(row=5, column=1, sticky=E+W)Button(root, text="3", width=2, command=lambda : add_number('3')).grid(row=5, column=2, sticky=E+W)Button(root, text="0", width=2, command=lambda : add_number('0')).grid(row=6, column=1, sticky=E+W)Button(root, text=".", width=2, command=lambda : add_number('.')).grid(row=6, column=2, sticky=E+W)
正负号按钮只对第一个操作数有效。
def plus_minus(): clear_result() upper = upper_display.cget('text') if len(upper) == 0: lower = lower_display.cget('text') if lower[0]=='-': lower_display.config(text=lower[1:]) else: lower_display.config(text='-' +lower)Button(root,text="+/-", width=2, command=plus_minus).grid(row=6, column=0, sticky=E+W)
求值按钮使用了Python语言的eval函数,从而避免了自己实现表达式解析。但是需要事先将表达式中'÷'和'×'替换为'/'和‘*’并去掉‘=’。
def calculate(): add_op('=') upper = upper_display.cget('text') upper = upper.replace('=', '') upper = upper.replace('÷', '/') upper = upper.replace('×', '*') result = format(eval(upper), 'g') lower_display.config(text=result)Button(root,text="=", width=2, command=calculate).grid(row=6, column=3, sticky=E+W)
这个计算器的功能并不完善,主要目的是展示Tkinter编程的简单程度。
完整代码可以从以下链接下载:
觉得本文有帮助?请分享给更多人。
关注【面向对象思考】,轻松学习每一天!
有任何疑问,欢迎留言提问或讨论。
面向对象设计,面向对象编程,面向对象思考!
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #tkinter做计算器