Python制作简易计算器(GUI)---Tkinter

这篇具有很好参考价值的文章主要介绍了Python制作简易计算器(GUI)---Tkinter。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Tkinter简介

tkinter模块是Python标准的TK GUI工具包接口,可以实现一些较为简单GUI的创建。

Tkinter 与 PyQt5 的比较

Tkinter

  1. 麻雀虽小,五脏俱全
  2. TK工具集使用TCL(Tool Command Language)语言开发
  3. 运行相同的程序时,运行速度快于pyqt5
  4. 组件能满足基本使用
  5. 程序界面较简陋
  6. 开发时,使用的语句更短更易懂
  7. Python内置的标准库

PyQt5

  1. Qt框架使用C++开发
  2. 组件丰富
  3. 运行相同的程序时,运行速度慢与tkinter
  4. 使用Qt designer可以在不使用代码的情况下创建一个程序
  5. 界面的观赏性更强
  6. 调试难度更大

项目展示

Python制作简易计算器(GUI)---Tkinter
可以通过点击桌面快捷方式直接运行,无须人为打开Python。
修改代码保存后,程序也会发生相应的改变。
Python制作简易计算器(GUI)---Tkinter

导入模块

import tkinter as tk
import tkinter.messagebox as mes

注:
要想使用tkinter的弹窗组件,必须导入tkinter.messagebox

函数封装

1. 运算公式的拼接与展示

def operation(num):
    content = buf_bottom.get()
    # 使用变量对象buf_bottom的get方法,获取标签内的文字信息
    buf_bottom.set(content+num)

2. 将显示框的内容删除

def clear():
    buf_top.set('')
   	# 使用变量对象的set方法将标签内容设置为空字符串
    buf_bottom.set('')

显示框分上下两部分,之所以这样分,是希望实现这样的一个效果。
Python制作简易计算器(GUI)---Tkinter
上面的标签对象用于展示计算过程中使用的表达式,下面的标签则是展示未完成的表达式以及计算结果的展示。

3. 使用eval()函数对表达式求值

这里我们使用eval实现计算结果的获取,eval()是Python的内建函数,它接受一个字符串,将该字符串作为Python代码运行后,返回结果。

def calculate():
    content = buf_bottom.get()
    buf_top.set(content + ' = ')
    try:
        buf_bottom.set(eval(content))
    # 将except ZeroDivisionError放在except的前面可以保证except ZeroDivisionError的正常执行
    # except 包含 except ZeroDivisionError
    except ZeroDivisionError:
        # 处理除数为零的异常情况
        buf_bottom.set('Infiniti')
        # 弹出警示窗口
        mes.showwarning('注意', '请不要使用零作为除数')
    except:
        # 处理所有的异常情况
        # 弹出错误提示窗口
        mes.showerror('错误', '输入的表达式有误,请重新输入')

在异常处理时要注意顺序,否则可能有些操作永远也执行不了。

主逻辑

1. 布局窗口

if __name__ == '__main__':
    # 保证下方代码在本文件作为模块导入其他文件时不会执行

    # 创建主窗口
    calc = tk.Tk()

    # 指定程序的宽高
    WIDTH_R = 283
    HEIGHT_R = 335
    # 获取计算机屏幕的宽高
    WIDTH_W = calc.winfo_screenwidth()
    HEIGHT_W = calc.winfo_screenheight()

    # 设置应用名称
    calc.title('计算器')
    # 设置应用图标(仅指定ico文件才有效,png等图片无法正常显示)
    calc.iconbitmap('./calculation.ico')
    # 设置主窗口背景颜色
    calc['background'] = '#d9d6c3'
    # 将程序移动到屏幕中央
    calc.geometry(f'{WIDTH_R}x{HEIGHT_R}+{(WIDTH_W - WIDTH_R) // 2}+{(HEIGHT_W - HEIGHT_R) // 2}')

注:

calc.geometry(f’{WIDTH_R}x{HEIGHT_R}+{(WIDTH_W - WIDTH_R) // 2}+{(HEIGHT_W - HEIGHT_R) // 2}')

  1. geometry方法接受一个字符串参数,依据它设置程序的宽高以及左上角的xy坐标。
    宽高之间必须 小写的字母x连接 ,其他数据之间则用 + 号连接。
  2. 至于将程序移动到屏幕中间的代码为什么会这样写,改变一下表达式或许你就能够理解

(WIDTH_W - WIDTH_R) // 2 --> WIDTH_W // 2 - WIDTH_R // 2
(HEIGHT_W - HEIGHT_R) // 2 --> HEIGHT_W // 2 - HEIGHT_R // 2

程序中使用的图标在这个链接里:
https://s1.chu0.com/src/img/png/bf/bfc39031c057479aad0e94706d4d26bb.png?imageMogr2/auto-orient/thumbnail/!132x132r/gravity/Center/crop/132x132/quality/85/&e=1735488000&token=1srnZGLKZ0Aqlz6dk7yF4SkiYf4eP-YrEOdM1sob:q3YCeYP0-2kOdXQG7LDXmls337w=

2. 布局表达式展示区域

    # 布局表达式展示区域
    # 创建变量对象,便于后续获取或更改变量的值
    buf_top = tk.StringVar()
    # 如果需要让标签对象的显示内容由一个字符串变量来实现,Label的参数就不能用text,需要使用textvariable
    buffer = tk.Label(calc, textvariable=buf_top, bg='#6f6d85', fg='#d3d7d4', height=1, width=10,
                      font=('arial', 14, 'normal'), anchor='se', pady=3, padx=2)
    # sticky参数可以实现类似pack方法的fill参数, 使标签横向铺满
    buffer.grid(sticky=tk.W + tk.E, row=0, column=0, columnspan=4)

    buf_bottom = tk.StringVar()
    buffer = tk.Label(calc, textvariable=buf_bottom, bg='#6f6d85', fg='#fff', height=1, width=10,
                      font=('arial', 18, 'normal'), anchor='se', pady=3, padx=2)
    buffer.grid(sticky=tk.W + tk.E, row=1, column=0, columnspan=4)

标签的位置,由参数anchor的属性值决定

Python制作简易计算器(GUI)---Tkinter


上述图片引用自C语言中文网

标签的位置默认是居中的。
参数值及其代表的方位可能不太好记忆,但只要记住了东西南北四个方位,记忆起来就方便多了。

方位 英文表示
East
西 West
South
North

3. 布局按钮

   # C
    tk.Button(calc, text='C', cursor='hand2', width=3, height=1, bg='#f2eada', font='arial 22 normal',
              command=lambda: clear()).grid(row=2, column=0, padx=5, pady=5)

    # 0
    tk.Button(calc, text=0, cursor='hand2', width=3, height=1, bg='#f2eada', font='arial 22 normal',
              command=lambda: operation('0')).grid(row=5, column=1, padx=5, pady=5)
    # 1
    tk.Button(calc, text=1, cursor='hand2', width=3, height=1, bg='#f2eada', font='arial 22 normal',
              command=lambda: operation('1')).grid(row=2, column=1, padx=5, pady=5)
    # 2
    tk.Button(calc, text=2, cursor='hand2', width=3, height=1, bg='#f2eada', font='arial 22 normal',
              command=lambda: operation('2')).grid(row=2, column=2, padx=5, pady=5)
    # 3
    tk.Button(calc, text=3, cursor='hand2', width=3, height=1, bg='#f2eada', font='arial 22 normal',
              command=lambda: operation('3')).grid(row=3, column=0, padx=5, pady=5)
    # 4
    tk.Button(calc, text=4, cursor='hand2', width=3, height=1, bg='#f2eada', font='arial 22 normal',
              command=lambda: operation('4')).grid(row=3, column=1, padx=5, pady=5)
    # 5
    tk.Button(calc, text=5, cursor='hand2', width=3, height=1, bg='#f2eada', font='arial 22 normal',
              command=lambda: operation('5')).grid(row=3, column=2, padx=5, pady=5)
    # 6
    tk.Button(calc, text=6, cursor='hand2', width=3, height=1, bg='#f2eada', font='arial 22 normal',
              command=lambda: operation('6')).grid(row=4, column=0, padx=5, pady=5)
    # 7
    tk.Button(calc, text=7, cursor='hand2', width=3, height=1, bg='#f2eada', font='arial 22 normal',
              command=lambda: operation('7')).grid(row=4, column=1, padx=5, pady=5)
    # 8
    tk.Button(calc, text=8, cursor='hand2', width=3, height=1, bg='#f2eada', font='arial 22 normal',
              command=lambda: operation('8')).grid(row=4, column=2, padx=5, pady=5)
    # 9
    tk.Button(calc, text=9, cursor='hand2', width=3, height=1, bg='#f2eada', font='arial 22 normal',
              command=lambda: operation('9')).grid(row=5, column=0, padx=5, pady=5)

    # 加号
    tk.Button(calc, text='+', cursor='hand2', width=3, height=1, bg='#f2eada', font='arial 22 normal',
              command=lambda: operation('+')).grid(row=2, column=3, padx=5, pady=5)

    # 乘号
    tk.Button(calc, text='*', cursor='hand2', width=3, height=1, bg='#f2eada', font='arial 22 normal',
              command=lambda: operation('*')).grid(row=4, column=3, padx=5, pady=5)
    # 除号
    tk.Button(calc, text='/', cursor='hand2', width=3, height=1, bg='#f2eada', font='arial 22 normal',
              command=lambda: operation('/')).grid(row=3, column=3, padx=5, pady=5)

    # 等号
    tk.Button(calc, text='=', cursor='hand2', width=7, height=1, bg='#f2eada', font='arial 22 normal',
              command= calculate).grid(row=5, column=2, columnspan=2, padx=5, pady=5)
    # 开启主循环
    calc.mainloop()

本想先用循环创建一些按钮,但由于点击按钮后,无法判断点击了哪个按钮。
于是:

    # 使用for循环创建0-8的按钮,其余按钮为了布局,得一个一个布置。
    face = 0
    for row in range(1, 4):
        for column in range(3):
            tk.Button(calc, text=face, cursor='hand2', width=3, height=1, bg='#f2eada', font='arial 22 normal', command=lambda: number(face)).grid \
                (row=row, column=column, padx=5, pady=5)
            face += 1

由于number是一个回调函数,当你点击后才会执行,而此时for循环已经结束(排除你手速足够快的情况),face=9。
因此无论你点哪一个数字按钮,显示的都会是9。
暂时并没有更好的解决方案,如果你知道怎么做,还请不吝赐教。

代码汇总

# 导入模块
import tkinter as tk
import tkinter.messagebox as mes


# 运算公式的拼接与展示
def operation(num):
    content = buf_bottom.get()
    # 使用变量对象buf_bottom的get方法,获取标签内的文字信息
    buf_bottom.set(content+num)


# 将显示框的内容删除
def clear():
    buf_top.set('')
    buf_bottom.set('')


# 使用eval()函数对表达式求值
def calculate():
    content = buf_bottom.get()
    buf_top.set(content + ' = ')
    try:
        buf_bottom.set(eval(content))
    # 将except ZeroDivisionError放在except的前面可以保证except ZeroDivisionError的正常执行
    # except 包含 except ZeroDivisionError
    except ZeroDivisionError:
        # 处理除数为零的异常情况
        # 弹出警示窗口
        buf_bottom.set('Infiniti')
        mes.showwarning('注意', '请不要使用零作为除数')
    except:
        # 处理所有的异常情况
        # 弹出错误提示窗口
        mes.showerror('错误', '输入的表达式有误,请重新输入')



if __name__ == '__main__':
    # 保证下方代码在本文件作为模块导入其他文件时不会执行

    # 创建主窗口
    calc = tk.Tk()

    # 指定程序的宽高
    WIDTH_R = 283
    HEIGHT_R = 335
    # 获取计算机屏幕的宽高
    WIDTH_W = calc.winfo_screenwidth()
    HEIGHT_W = calc.winfo_screenheight()

    # 设置应用名称
    calc.title('计算器')
    # 设置应用图标(仅指定ico文件才有效,png等图片无法正常显示)
    calc.iconbitmap('./calculation.ico')
    # 设置主窗口背景颜色
    calc['background'] = '#d9d6c3'
    # 将程序移动到屏幕中央
    calc.geometry(f'{WIDTH_R}x{HEIGHT_R}+{(WIDTH_W - WIDTH_R) // 2}+{(HEIGHT_W - HEIGHT_R) // 2}')

    # 布局表达式展示区域
    # 创建变量对象,便于后续获取或更改变量的值
    buf_top = tk.StringVar()
    # 如果需要让标签对象的显示内容由一个字符串变量来实现,Label的参数就不能用text,需要使用textvariable
    buffer = tk.Label(calc, textvariable=buf_top, bg='#6f6d85', fg='#d3d7d4', height=1, width=10,
                      font=('arial', 14, 'normal'), anchor='se', pady=3, padx=2)
    # sticky参数可以实现类似pack方法的fill参数, 使标签横向铺满
    buffer.grid(sticky=tk.W + tk.E, row=0, column=0, columnspan=4)

    buf_bottom = tk.StringVar()
    buffer = tk.Label(calc, textvariable=buf_bottom, bg='#6f6d85', fg='#fff', height=1, width=10,
                      font=('arial', 18, 'normal'), anchor='se', pady=3, padx=2)
    buffer.grid(sticky=tk.W + tk.E, row=1, column=0, columnspan=4)

    # C
    tk.Button(calc, text='C', cursor='hand2', width=3, height=1, bg='#f2eada', font='arial 22 normal',
              command=lambda: clear()).grid(row=2, column=0, padx=5, pady=5)

    # 0
    tk.Button(calc, text=0, cursor='hand2', width=3, height=1, bg='#f2eada', font='arial 22 normal',
              command=lambda: operation('0')).grid(row=5, column=1, padx=5, pady=5)
    # 1
    tk.Button(calc, text=1, cursor='hand2', width=3, height=1, bg='#f2eada', font='arial 22 normal',
              command=lambda: operation('1')).grid(row=2, column=1, padx=5, pady=5)
    # 2
    tk.Button(calc, text=2, cursor='hand2', width=3, height=1, bg='#f2eada', font='arial 22 normal',
              command=lambda: operation('2')).grid(row=2, column=2, padx=5, pady=5)
    # 3
    tk.Button(calc, text=3, cursor='hand2', width=3, height=1, bg='#f2eada', font='arial 22 normal',
              command=lambda: operation('3')).grid(row=3, column=0, padx=5, pady=5)
    # 4
    tk.Button(calc, text=4, cursor='hand2', width=3, height=1, bg='#f2eada', font='arial 22 normal',
              command=lambda: operation('4')).grid(row=3, column=1, padx=5, pady=5)
    # 5
    tk.Button(calc, text=5, cursor='hand2', width=3, height=1, bg='#f2eada', font='arial 22 normal',
              command=lambda: operation('5')).grid(row=3, column=2, padx=5, pady=5)
    # 6
    tk.Button(calc, text=6, cursor='hand2', width=3, height=1, bg='#f2eada', font='arial 22 normal',
              command=lambda: operation('6')).grid(row=4, column=0, padx=5, pady=5)
    # 7
    tk.Button(calc, text=7, cursor='hand2', width=3, height=1, bg='#f2eada', font='arial 22 normal',
              command=lambda: operation('7')).grid(row=4, column=1, padx=5, pady=5)
    # 8
    tk.Button(calc, text=8, cursor='hand2', width=3, height=1, bg='#f2eada', font='arial 22 normal',
              command=lambda: operation('8')).grid(row=4, column=2, padx=5, pady=5)
    # 9
    tk.Button(calc, text=9, cursor='hand2', width=3, height=1, bg='#f2eada', font='arial 22 normal',
              command=lambda: operation('9')).grid(row=5, column=0, padx=5, pady=5)

    # 加号
    tk.Button(calc, text='+', cursor='hand2', width=3, height=1, bg='#f2eada', font='arial 22 normal',
              command=lambda: operation('+')).grid(row=2, column=3, padx=5, pady=5)

    # 乘号
    tk.Button(calc, text='*', cursor='hand2', width=3, height=1, bg='#f2eada', font='arial 22 normal',
              command=lambda: operation('*')).grid(row=4, column=3, padx=5, pady=5)
    # 除号
    tk.Button(calc, text='/', cursor='hand2', width=3, height=1, bg='#f2eada', font='arial 22 normal',
              command=lambda: operation('/')).grid(row=3, column=3, padx=5, pady=5)

    # 等号
    tk.Button(calc, text='=', cursor='hand2', width=7, height=1, bg='#f2eada', font='arial 22 normal',
              command= calculate).grid(row=5, column=2, columnspan=2, padx=5, pady=5)
    # 开启主循环
    calc.mainloop()

实现桌面点击直接启动计算器(无须人为开启Python)

创建了一个GUI程序,如果还每次都要在命令行这样打开:

python calculation.py文章来源地址https://www.toymoban.com/news/detail-474444.html

怕是一种罪孽。
如果想让程序也能像其他桌面应用一样使用,可以这样做:

  1. 将文件的后缀名由 .py 改为 .pyw
  2. 在命令行中输入:

pythonw calculation.pyw

即可。
此后,即便你重启计算机,也能点击文件直接打卡程序。
相当于你点击.pyw 文件后,系统隐式执行了:

python calculation.py

到了这里,关于Python制作简易计算器(GUI)---Tkinter的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C# 制作简易计算器

    前言:环境是vs 2022 1、打开vs2022后,右边导航栏选择创建新项目。  2、选择Windows窗体应用(.net  Framework)  3、进入配置新项目界面(项目名称和位置可自行修改)点击创建  4、窗体From1即为我们要要编辑的位置  5、在窗体中添加对应的工具 6、并在对应的属性窗口为其修改

    2024年02月08日
    浏览(41)
  • 制作一个简易的计算器app

    github项目地址:https://github.com/13008451162/AndroidMoblieCalculator 笔者的Ui制作的制作的比较麻烦仅供参考,在这里使用了多个LinearLayout对屏幕进行了划分。不建议大家这样做最好使用GridLayout会更加快捷简单 笔者大致划分是这样的: 使用了四个大框,在第四个大框里面有多个小框

    2024年02月15日
    浏览(36)
  • Qt 制作一个简易的计算器

    1.通过UI界面封装出计算器的大致模型 进入设计页面后,左侧会有各种控件,可以将他们拖拽到你想编辑的窗口中,我们要做的是计算器,所以只用到很少几个控件,我们最主要用到Push Button这个控件来做我们计算器的按钮,lineEdit显示数字,我们可以将它拖拽到窗口,然后就

    2024年02月05日
    浏览(118)
  • MFC基于对话框——仿照Windows计算器制作C++简易计算器

    目录 一、界面设计 二、设置成员变量 三、初始化成员变量  四、初始化对话框 ​五、添加控件代码 1.各个数字的代码(0~9) 2.清除功能的代码 3.退格功能的代码 4.加减乘除功能的代码 5.小数点功能的代码 6.正负号功能的代码 7.等于功能的代码 六、源码领取方式 制作好之后

    2024年02月05日
    浏览(50)
  • 微信小程序如何制作简易计算器

    1、首先在浏览器中输入\\\"GitHub - dunizb/wxapp-sCalc: :speech_balloon:微信小程序版简易计算器demo,适合入门练手\\\"网址,输入完成后会进入到以下这个界面: 2、点击旁边绿色的按键 3、点击之后会有以下几个选项: 点击最后一行的Download ZIP,下载一个文件 然后解压一下这个文件,解压完

    2024年04月23日
    浏览(52)
  • 【Java GUI】用java实现简单计算器的制作 项目(一)

    目录 正文       项目前提      项目思路      项目实现 一:实现图形化界面的设计    二:关于按钮监听及文本框展示的实现         三:表达式运算的实现 四:完整代码 作者的话          ~掌握java基本语法         ~熟悉基础数据结构的运用         ~了解Java Swin

    2024年02月05日
    浏览(41)
  • Python自制简易版计算器小程序

    今天来给你们分享一个自制的桌面小程序【简易版计算器】 文章内有效果展示,你们可以自行看看哦 不想看文章,想直接领取源码的话,可以直接点击文章末尾的名片哈 Python 3.6 Pycharm 界面设置 导入模块 所有 源码 点击 此处 领取 即可 实例化一个窗体对象 标题 大小以及出

    2024年02月09日
    浏览(38)
  • Python - 简易版计算器(附完整代码)

    对输入的两个数进行一次加减乘除 对输入的运算符进行判断 做出计算机图形界面

    2024年02月08日
    浏览(40)
  • python界面开发案例:制作一个计算器软件

    前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 在我们手机上大家都有一个计算器,对吧 那它这功能是怎么实现的呢? 今天我们在电脑上来实现一个电脑端计算器界面~ 开发环境: Python 3.8 / 编译器 Pycharm 2021.2版本 / 编辑器 本文所有模块环境源码教程皆可点击文章下方

    2023年04月16日
    浏览(45)
  • python GUI编程--实现计算器和图书管理系统注册和登录的可视化操作

    1.简易计算器:编写程序,实现两个数的“加减乘除”,界面如图所示  2.利用tkinter设计一个登录界面,并实现各个命令按钮的功能: 3.利用tkinter设计一个下面的界面, 该界面的功能是:当单击“insert point”按钮时,第一个文本框的内容复制一份显示在第二个文本框内,当单

    2024年02月10日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包