Python制作简易计算器功能

作者:壹屋安源 时间:2023-05-06 19:53:47 

本文实例为大家分享了Python制作简易计算器的具体代码,供大家参考,具体内容如下

简易计算器

简易计算器功能:

  • 实现输入,计算,输出功能;

  • 可以计算基本的加减乘除功能;

  • 处理除法中除数不能为零的设计;

  • 处理输入不能为空的设计;

  • 记录历史计算,显示在右边文本框;

不同于之前的两个项目,这个项目的布局是网格布局,窗口的设计比较像,但是实际的网格布局实现过程中也是碰了许多的坑。

窗口

实现最基本的窗口界面

import tkinter as tk
import tkinter.messagebox
win = tk.Tk()         #窗口名称
win.title("简易计算器")
win.geometry('650x600')  # 这里的乘是小x
win.mainloop()

geometry()设置窗口的大小,格式:高x宽+起始x位置+起始y位置,例如:“600x600+50+50”意思是大小为600*600,起始位置坐标为(50,50)

Python制作简易计算器功能

布局

标题

使用标签Label实现,标签上可以展示文字,居中,可以设置背景色,字体字号,以及标签的大小。

b=tk.Label(win, text='简易计算器',justify=tk.CENTER, height=2 , width=50 ,font=('楷体', 20),background='lightcyan')  # 文本框名字
b.grid(row=0,columnspan=6)

Python制作简易计算器功能

输入框

输入框a1,a2使用的是Entry,前面的名字使用的是Label标签
justify表示文字的位置,或者输入文字的起始位置是从那一边开始,有左和右,
width和height,代表宽度和高度
font,里面包含楷体和字号,这个可以不写,有默认值。
grid显示布局的位置,行列号。row,column分别代表行和列,rowspan,columnspan代表行列方向上占据的大小
通过输入框名字.get()获取输入框内的内容

b1=tk.Label(win, text='a:',justify=tk.CENTER, height=2 , width=5 ,font=('楷体', 15))  # 文本框名字
b1.grid(row=1,column=0)
a1 = tk.Entry(win, justify=tk.LEFT, width=15 , font=('楷体', 15))  # 文本框创建
a1.grid(row=1,column=1)

b2 = tk.Label(win, text='b:',justify=tk.CENTER, height=2 , width=5 , font=('楷体', 15))  # 文本框名字
b2.grid(row=2,column=0)
a2 = tk.Entry(win, justify=tk.LEFT, width=15 , font=('楷体', 15) )  # 文本框创建
a2.grid(row=2,column=1)

Python制作简易计算器功能

文本记录框

记录历史计算的文本,通过insert插入拼接完成的字符串数据,通过数值标记完成换行 两列换行操作。如果不设置文本框的大小,只设置占据的行列数时,会导致窗口变得大小不定,组件之间的空隙较大,不并不很美观。

txt = tk.Text(win,height=20, width=40 ,font=('楷体', 15))    #font对输入的文本的字体和大小进行规定
txt.grid(row=1,column=4,rowspan=4,columnspan=4)                #大小是4*4

按钮功能

当两个数据输进去以后,我们将数据按照按钮点击的需求进行计算,并且弹出结果。实现功能:

  • 当输为空的时候,弹窗提示,并且保证可以再次输入数据等操作

  • 除法运算的特殊之处,除数不能为零,也需要在输入错误时进行提示

  • 当结果计算完成时,要完成算式的拼接,插入文本框中

  • 提示计算的结果

  • 清空输入框,等到下一次的计算输入

  • 判断历史计算的次数,为插入算式的位置进行改变。两列数据之间要进行间隔的设置。

每一个按钮的设计方法相似,知识各有各的实现功能,大同小异,格式都相同,只是计算不一样。可以通过研究一个函数功能,类推其他几个。

num=0     #用来记录历史计算次数
def sum():
    if a1.get()=='' or a2.get()=='':
        return tkinter.messagebox.showinfo('消息提示', '输入不能为空')
    global num
    num += 1
    a = float(a1.get())      #获取输入框内的内容,收集到的为字符型,需要进行转化
    b = float(a2.get())
    c = a + b
    s = str('%d'%a + ' + '+'%d'%b + ' = ' + '%d'%c)            #完成数据的拼接
    if num%2==0:
        s=s+ '\n'            #第偶数个算式后面加上空格进行间隔
        print(num)
    else:
        s=s+'\t'            #第奇数个算式进行换行处理
    txt.insert(tk.END,s)
    tkinter.messagebox.showinfo('消息提示', '求商结果是:%d'%c)
    a1.delete(0, tk.END)            #清空输入框内的数据
    a2.delete(0, tk.END)

def multiply():
    if a1.get()=='' or a2.get()=='':
        return tkinter.messagebox.showinfo('消息提示', '输入不能为空')
    global num
    num += 1
    a = float(a1.get())
    b = float(a2.get())
    c = a * b
    s = str('%d' % a + ' * ' + '%d' % b + ' = ' + '%d' % c)
    if num%2==0:
        s=s+ '\n'
        print(num)
    else:
        s=s+'\t'
    txt.insert(tk.END, s)
    tkinter.messagebox.showinfo('消息提示', '求积结果是:%d'%c)
    a1.delete(0, tk.END)
    a2.delete(0, tk.END)
def subtract():
    if a1.get()=='' or a2.get()=='':
        return tkinter.messagebox.showinfo('消息提示', '输入不能为空')
    global num
    num += 1
    a = float(a1.get())
    b = float(a2.get())
    c = a - b
    s = str('%d' % a + ' - ' + '%d' % b + ' = ' + '%d' % c)
    if num%2==0:
        s=s+ '\n'
        print(num)
    else:
        s=s+'\t'
    txt.insert(tk.END, s)
    tkinter.messagebox.showinfo('消息提示', '求差结果是:%d'%c)
    a1.delete(0, tk.END)
    a2.delete(0, tk.END)
def divide():
    if a1.get()=='' or a2.get()=='':
        return tkinter.messagebox.showinfo('消息提示', '输入不能为空')
    global num
    num += 1
    a = float(a1.get())
    b = float(a2.get())
    if float(b)==0.0:
        tkinter.messagebox.showinfo('消息提示', '除数不能为零!!!')
        a2.delete(0 , tk.END)  # 当除数为0时,不能进行计算,并且需要弹窗提示,清空数据
    else:
        c = a / b
        s = str('%d' % a + ' / ' + '%d' % b + ' = ' + '%d' % c)
        if num % 2 == 0:
            s = s + '\n'
            print(num)
        else:
            s = s + '\t'
        txt.insert(tk.END, s)
        tkinter.messagebox.showinfo('消息提示', '求商结果是:%d'%c)
        a1.delete(0, tk.END)
        a2.delete(0, tk.END)

按钮

这里有一个坑,刚开始我设计按钮的时候直接是:command = sum(),于是函数在我还没有点击按钮时就进行了一次计算,所以刚开始运行程序就提醒我输入不能为空。试了很多方法,才试到这个方法。在函数前面加上:“lamba:”。
justify=tk.CENTER设计文字在按钮的中间

a4 = tk.Button(win, text='求和',justify=tk.CENTER, width=10, font=('楷体', 15) ,command = lambda :sum() )  # 文本框创建
a4.grid(row=3, column=0)
a5 = tk.Button(win, text='求积', justify=tk.CENTER, width=10 , font=('楷体', 15), command = lambda :multiply())  # 文本框创建
a5.grid(row=3, column=1)
a6 = tk.Button(win, text='求差', justify=tk.CENTER, width=10, font=('楷体', 15), command = lambda :subtract()) # 文本框创建
a6.grid(row=4, column=0)
a7 = tk.Button(win, text='求商', justify=tk.CENTER, width=10, font=('楷体', 15), command = lambda :divide())  # 文本框创建
a7.grid(row=4, column=1)

Python制作简易计算器功能

附完整代码:

import tkinter as tk
import tkinter.messagebox
win = tk.Tk()         #窗口名称
win.title("简易计算器")
win.geometry('650x600')  # 这里的乘是小x

b=tk.Label(win, text='简易计算器',justify=tk.CENTER, height=2 , width=50 ,font=('楷体', 20),background='lightcyan')  # 文本框名字
b.grid(row=0,columnspan=6)

b1=tk.Label(win, text='a:',justify=tk.CENTER, height=2 , width=5 ,font=('楷体', 15))  # 文本框名字
b1.grid(row=1,column=0)
a1 = tk.Entry(win, justify=tk.LEFT, width=15 , font=('楷体', 15))  # 文本框创建
a1.grid(row=1,column=1)

b2 = tk.Label(win, text='b:',justify=tk.CENTER, height=2 , width=5 , font=('楷体', 15))  # 文本框名字
b2.grid(row=2,column=0)
a2 = tk.Entry(win, justify=tk.LEFT, width=15 , font=('楷体', 15) )  # 文本框创建
a2.grid(row=2,column=1)

txt = tk.Text(win,height=20, width=40 ,font=('楷体', 15))
txt.grid(row=1,column=4,rowspan=4,columnspan=4)

num=0
def sum():
    if a1.get()=='' or a2.get()=='':
        return tkinter.messagebox.showinfo('消息提示', '输入不能为空')
    global num
    num += 1
    a = float(a1.get())
    b = float(a2.get())
    c = a + b
    s = str('%d'%a + ' + '+'%d'%b + ' = ' + '%d'%c)
    if num%2==0:
        s=s+ '\n'
        print(num)
    else:
        s=s+'\t'
    txt.insert(tk.END,s)
    tkinter.messagebox.showinfo('消息提示', '求商结果是:%d'%c)
    a1.delete(0, tk.END)
    a2.delete(0, tk.END)

def multiply():
    if a1.get()=='' or a2.get()=='':
        return tkinter.messagebox.showinfo('消息提示', '输入不能为空')
    global num
    num += 1
    a = float(a1.get())
    b = float(a2.get())
    c = a * b
    s = str('%d' % a + ' * ' + '%d' % b + ' = ' + '%d' % c)
    if num%2==0:
        s=s+ '\n'
        print(num)
    else:
        s=s+'\t'
    txt.insert(tk.END, s)
    tkinter.messagebox.showinfo('消息提示', '求积结果是:%d'%c)
    a1.delete(0, tk.END)
    a2.delete(0, tk.END)
def subtract():
    if a1.get()=='' or a2.get()=='':
        return tkinter.messagebox.showinfo('消息提示', '输入不能为空')
    global num
    num += 1
    a = float(a1.get())
    b = float(a2.get())
    c = a - b
    s = str('%d' % a + ' - ' + '%d' % b + ' = ' + '%d' % c)
    if num%2==0:
        s=s+ '\n'
        print(num)
    else:
        s=s+'\t'
    txt.insert(tk.END, s)
    tkinter.messagebox.showinfo('消息提示', '求差结果是:%d'%c)
    a1.delete(0, tk.END)
    a2.delete(0, tk.END)
def divide():
    if a1.get()=='' or a2.get()=='':
        return tkinter.messagebox.showinfo('消息提示', '输入不能为空')
    global num
    num += 1
    a = float(a1.get())
    b = float(a2.get())
    if float(b)==0.0:
        tkinter.messagebox.showinfo('消息提示', '除数不能为零!!!')
        a2.delete(0 , tk.END)  # 删除文本框内索引为0-999的字符
    else:
        c = a / b
        s = str('%d' % a + ' / ' + '%d' % b + ' = ' + '%d' % c)
        if num % 2 == 0:
            s = s + '\n'
            print(num)
        else:
            s = s + '\t'
        txt.insert(tk.END, s)
        tkinter.messagebox.showinfo('消息提示', '求商结果是:%d'%c)
        a1.delete(0, tk.END)
        a2.delete(0, tk.END)
a4 = tk.Button(win, text='求和',justify=tk.CENTER, width=10, font=('楷体', 15) ,command = lambda :sum() )  # 文本框创建
a4.grid(row=3, column=0)
a5 = tk.Button(win, text='求积', justify=tk.CENTER, width=10 , font=('楷体', 15), command = lambda :multiply())  # 文本框创建
a5.grid(row=3, column=1)
a6 = tk.Button(win, text='求差', justify=tk.CENTER, width=10, font=('楷体', 15), command = lambda :subtract()) # 文本框创建
a6.grid(row=4, column=0)
a7 = tk.Button(win, text='求商', justify=tk.CENTER, width=10, font=('楷体', 15), command = lambda :divide())  # 文本框创建
a7.grid(row=4, column=1)
win.mainloop()

本篇博客只实现了较为简单的计算功能,当然也可以设计更多的功能,只需要加以研究,就可以完成。

来源:https://blog.csdn.net/qq_44793283/article/details/111571179

标签:python,计算器
0
投稿

猜你喜欢

  • 教你用Python读取CSV文件的5种方式

    2022-12-11 15:32:51
  • Django CSRF跨站请求伪造防护过程解析

    2021-04-15 03:00:50
  • python获取mp3文件信息的方法

    2023-12-18 19:49:11
  • python3转换code128条形码的方法

    2021-01-07 07:14:47
  • JS中把函数作为另一函数的参数传递方法(总结)

    2024-05-05 09:14:39
  • Python3.7安装keras和TensorFlow的教程图解

    2022-09-05 13:23:00
  • NumPy统计函数的实现方法

    2021-10-15 22:02:27
  • 对python中的os.getpid()和os.fork()函数详解

    2022-11-29 05:22:51
  • Python APScheduler执行使用方法详解

    2023-03-01 03:21:13
  • Python中ROC曲线绘制

    2023-05-28 16:38:15
  • Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式

    2024-04-23 09:08:58
  • 关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题

    2023-11-25 16:27:55
  • nginx搭建基于python的web环境的实现步骤

    2023-07-27 07:06:49
  • python文件读写操作与linux shell变量命令交互执行的方法

    2022-10-24 06:37:55
  • 你是真正的用户体验设计者吗? Ⅵ

    2008-04-19 18:23:00
  • 详解SQL Server数据库架构和对象、定义数据完整性

    2024-01-23 06:48:16
  • Python3正则表达式之:(?(id/name)yes-pattern|no-pattern)条件性匹配

    2022-04-09 14:46:32
  • js实现页面图片消除效果

    2024-04-28 10:20:54
  • 网友分享:Oracle数据库开发技术经验浅谈

    2009-04-22 13:11:00
  • Pandas直接读取sql脚本的方法

    2022-08-16 20:16:34
  • asp之家 网络编程 m.aspxhome.com