Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >手把手教你使用PySimpleGUI库打造一款轻量级计算器

手把手教你使用PySimpleGUI库打造一款轻量级计算器

作者头像
Python进阶者
发布于 2022-03-07 06:06:24
发布于 2022-03-07 06:06:24
73800
代码可运行
举报
运行总次数:0
代码可运行

前言

前几天在Python交流群里边,【🌑(这是月亮的背面)】大佬分享了一个有趣的代码,用于PySimpleGUI库打造了一款简易计算器,觉得挺有意思,非常适合入门PySimpleGUI的小伙伴们学习,这里拿出来给大家分享一波。

实现过程

这里直接上代码,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import PySimpleGUI as sg


# 定义主窗口布局,确定行数
def window_main():
    layout = [
        [sg.Text('计算结果:', font=("微软雅黑", 10)), sg.Button('历史记录', font=("微软雅黑", 10), pad=(10, 1))],
        [sg.Text('0', key='-express-', justification='right', size=(30, 1), font=("微软雅黑", 10), background_color='#fff', text_color='#000')],
        [sg.Text('0', key='-result-', justification='right', size=(30, 1), font=("微软雅黑", 10), background_color='#fff', text_color='#000')],
        [sg.Button('清空', size=(6, 2)), sg.Button('删除', size=(6, 2)), sg.Button('x²', size=(6, 2)), sg.Button('÷', size=(6, 2))],
        [sg.Button('7', size=(6, 2)), sg.Button('8', size=(6, 2)), sg.Button('9', size=(6, 2)), sg.Button('x', size=(6, 2))],
        [sg.Button('4', size=(6, 2)), sg.Button('5', size=(6, 2)), sg.Button('6', size=(6, 2)), sg.Button('-', size=(6, 2))],
        [sg.Button('1', size=(6, 2)), sg.Button('2', size=(6, 2)), sg.Button('3', size=(6, 2)), sg.Button('+', size=(6, 2))],
        [sg.Button('+/-', size=(6, 2)), sg.Button('0', size=(6, 2)), sg.Button('.', size=(6, 2)), sg.Button('=', size=(6, 2))],
    ]

    # 创建窗口
    return sg.Window('简易计算器@月亮', layout, finalize=True, default_element_size=(50, 1))

# 定义历史记录窗口布局
def createwindow_history(history_list=None):
    history_text = ''
    if history_list:
        history_text = '\n'.join(['='.join(i) for i in history_list])
    layout = [
        [sg.Text('历史记录:', font=("微软雅黑", 10))],
        [sg.Multiline(history_text, justification='right', disabled=True, autoscroll=True, size=(30, 10), font=("微软雅黑", 10), background_color='#fff', text_color='#000')]
    ]
    return sg.Window('历史记录', layout, finalize=True)


def get_result(eval_str):
    global result
    eval_str = eval_str.replace('^', '**').replace('x', '*').replace('÷', '/')
    try:
        result = eval(eval_str)
    except Exception as e:
        result = '0'
    window_main['-result-'].update(result)
    return str(result)


window_main = window_main()
window_sub = None
history_list = []
express = '0'
result = '0'
flag = 0

while True:
    window, event, value = sg.read_all_windows()
    if window == window_main and event in (None, sg.WIN_CLOSED):
        if window_sub is not None:
            window_sub.close()
        break
    elif event == '历史记录':
        if not window_sub:
            window_sub = createwindow_history(history_list)
        else:
            window_sub.close()
            window_sub = None
    elif window == window_sub and event is None:
        window_sub.close()
        window_sub = None
    elif event == '=':
        express1 = express
        express = get_result(express)
        history_list.append([express1, express])
        flag = 1
    elif event == '清空':
        express = '0'
        result = '0'
        window_main['-express-'].update(express)
        window_main['-result-'].update(result)
    elif event == '删除':
        if len(express.lstrip('-').strip('(').strip(')')) == 1:
            express = '0'
        elif express[-1] == ')':
            express = express.lstrip('-').strip('(').strip(')')
        else:
            express = express[:-1]
        window_main['-express-'].update(express)
    elif event == 'x²':
        express = f'({express}) ^ 2'
        window_main['-express-'].update(express)
    elif event == '+/-':
        express = f'-({express})'
        get_result(express)
    else:
        if flag == 1 and event in '0123456789':
            express = '0'
            flag = 0
        if express == '0':
            express = event
        else:
            express = express + event
        window_main['-express-'].update(express)

window.close()

代码运行之后,一款建议计算器就已经浮现在眼前了。

之后你可以自己做点简单的加减乘除等计算,都是可以的,也支持清除,查看历史记录功能等等。

总结

大家好,我是Python进阶者。这篇文章主要基于PySimpleGUI库,打造了一款轻量级计算器,实现计算器的相关功能。

最后感谢【🌑(这是月亮的背面)】大佬的代码分享,也欢迎大家积极尝试,有好的内容也可以分享给我噢!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python爬虫与数据挖掘 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
用Python制作一个随机抽奖小工具
最近在工作中面向社群玩家组织了一场活动,需要进行随机抽奖,参考之前小明大佬的案例,再结合自己的需求,做了一个简单的随机抽奖小工具。
可以叫我才哥
2021/08/05
2.1K0
[1212]Python GUI之PySimpleGUI
最后一个执行后程序会在2s左右自动退出,除了以上的简单的默认函数外,还可以手动设置参数;
周小董
2023/10/10
1.1K0
[1212]Python GUI之PySimpleGUI
【Python】GUI:基于VB、Python、PythonGUI的BMI计算器小程序
昨天做了一个基于Labview的BMI计算器,想着既然Labview能做,其他编程语言行不行呢,说干就干!
DevFrank
2024/07/24
3300
【Python】GUI:基于VB、Python、PythonGUI的BMI计算器小程序
【云+社区年度征文】PySimpleGUI一个建立在tkinter之上更简单但功能强大的GUI
你将会学会一个除了Pyqt5、TK等其它界面编程的Python第三方库,你可以利用它更方便的做出交互的界面。
王荣胜
2020/12/03
5.1K0
手把手教你爬取某酷音乐付费歌曲~
爬取酷我音乐相比网易云音乐、酷狗音乐以及QQ音乐来说容易很多,没有加密算法,而且在反爬虫中不存在一些难理解的逻辑,只需要理清思路即可!本文会用爬虫+GUI制作酷我音乐下载工具
Python与Excel之交
2021/08/05
3.6K0
爱了爱了,扔了网上的正则调试工具后,我吧啦吧啦自己写了一个!(文末附源码以及工具下载)
最近在做个项目,里面经常用到正则表达式,需要不停的调试修改正则表达式,如果直接在程序里跑,是一件很麻烦且缓慢的事,网上有挺多的正则表达式调试网站,奈何这边网络太差,比让人在程序里跑还让人崩溃,所以就自己写了个正则表达式调试小工具。
Python与Excel之交
2021/09/06
5690
80行代码自己动手写一个表格拆分与合并小工具(文末附工具下载)
可能是最近加班熬夜太多,这个周末身体不舒服,头痛、冷汗什么的。终于在连着睡了接近2天后,现在慢慢恢复了。
可以叫我才哥
2021/08/05
1.4K0
40行代码自己动手写pdf转word小工具(文末附工具下载)
今天咱们介绍一个pdf转word的免费小工具,满足这么一个不常见但是偶尔会出来烦人的需求!
可以叫我才哥
2021/08/05
2.6K0
惊呆同事的自动化小工具来了!Python 批量将 PDF 转 Word
本期视频内容:惊呆同事的自动化小工具来了!Python 批量将 PDF 转 Word
杰哥的IT之旅
2022/12/06
1.7K0
惊呆同事的自动化小工具来了!Python 批量将 PDF 转 Word
PySimpleGUI实践之这个汉子怎么读?
今天有个同学咨询我,如何才能快速入门 Python 的 GUI 程序开发。今天我就用一个简单且实用的例子来带领带大家快速上手。
Python研究所
2022/06/17
1.1K0
PySimpleGUI实践之这个汉子怎么读?
140行代码自己动手写一个词云制作小工具(文末附工具下载)
继之前出过表格拆分与合并小工具、pdf转word小工具后,今天我们迎来了词云制作小工具。
可以叫我才哥
2021/08/05
1.1K0
用Python敲一个今日历史查看小工具,让它来告诉你历史的今天发生过什么大事!
这篇文章灵感源于最近发生的事,信息量都很大,然后突然就想看看历史的今天有发生过什么大事件,最后就写了个查看今日历史的小工具,下面就开始实战!
Python与Excel之交
2021/08/05
8531
用Python手撕一个批量填充数据到excel表格的工具,解放双手!
今天这篇文章是根据批量填充数据的进阶版。基础版本就一段很简单的代码。虽然简单,但如果这个模板或者数据发生变化,还是要改来改去的,所以本文就在基础版本上进行改进,只需要动动鼠标就可以填充大量数据到Excel工作表中。
Python与Excel之交
2021/08/05
2.1K0
用python实现清理重复文件工具~
在电脑上或多或少的存在一些重复文件,体积小的倒没什么,如果体积大的就很占内存了,而如果自己一个一个查看文件是否重复,然后再删除,还是很要命的。
Python与Excel之交
2021/11/09
2K0
用python实现清理重复文件工具~
【经验分享】使用Python的图形库创建一个好看实用的计算器,附完整项目代码
本项目展示了如何使用ttkbootstrap模块创建一个功能齐全且美观的计算器应用程序。通过菜单栏提供的各种功能,用户可以方便地进行主题切换、窗口大小调整、查看历史记录和其他信息等操作。这不仅提高了计算器的实用性,也增强了用户体验。
命运之光
2024/08/02
3060
【经验分享】使用Python的图形库创建一个好看实用的计算器,附完整项目代码
用Python制作一个B站视频下载小工具(文末附完整代码)
今天我们分享一个小工具,主要用于B站视频的下载,只需要输入对应视频的网页地址就可以进行下载到本地了。
可以叫我才哥
2022/04/12
4.3K1
用Python制作一个B站视频下载小工具(文末附完整代码)
用python实现千图成像工具,快给你的男/女神弄一张吧~
千图成像也就是用N张图片组成一张图片的效果。制作方法有很多的,最常见的如用ps、懒人图云、foto-mosaik-edda这些制作。
Python与Excel之交
2021/10/26
1.1K0
用python实现千图成像工具,快给你的男/女神弄一张吧~
用python实现批量打包程序的工具~
最近看了一些大佬发的关于可视化打包工具auto-py-to-exe文章,auto-py-to-exe是基于pyinstaller,但相比于pyinstaller,它多了 GUI 界面。我自己也试了一下,感觉确实好用且方便,动动手指就能对程序进行打包。
Python与Excel之交
2021/10/14
1.3K0
Python自动化处理Excel表格实战完整代码分享(课表解析)
今天不做展开式讲解,就分享春节期间接的Python单子,将原始课程总表按照指定格式输出。
可以叫我才哥
2022/04/12
1.4K2
Python自动化处理Excel表格实战完整代码分享(课表解析)
手把手教你抖音系列视频批量下载器开发
此时我们只需要点击 访问抖音主页,程序则会使用本地的谷歌游览器访问抖音主页。再次点击下载按钮:
Python进阶者
2022/03/10
2.2K0
手把手教你抖音系列视频批量下载器开发
推荐阅读
用Python制作一个随机抽奖小工具
2.1K0
[1212]Python GUI之PySimpleGUI
1.1K0
【Python】GUI:基于VB、Python、PythonGUI的BMI计算器小程序
3300
【云+社区年度征文】PySimpleGUI一个建立在tkinter之上更简单但功能强大的GUI
5.1K0
手把手教你爬取某酷音乐付费歌曲~
3.6K0
爱了爱了,扔了网上的正则调试工具后,我吧啦吧啦自己写了一个!(文末附源码以及工具下载)
5690
80行代码自己动手写一个表格拆分与合并小工具(文末附工具下载)
1.4K0
40行代码自己动手写pdf转word小工具(文末附工具下载)
2.6K0
惊呆同事的自动化小工具来了!Python 批量将 PDF 转 Word
1.7K0
PySimpleGUI实践之这个汉子怎么读?
1.1K0
140行代码自己动手写一个词云制作小工具(文末附工具下载)
1.1K0
用Python敲一个今日历史查看小工具,让它来告诉你历史的今天发生过什么大事!
8531
用Python手撕一个批量填充数据到excel表格的工具,解放双手!
2.1K0
用python实现清理重复文件工具~
2K0
【经验分享】使用Python的图形库创建一个好看实用的计算器,附完整项目代码
3060
用Python制作一个B站视频下载小工具(文末附完整代码)
4.3K1
用python实现千图成像工具,快给你的男/女神弄一张吧~
1.1K0
用python实现批量打包程序的工具~
1.3K0
Python自动化处理Excel表格实战完整代码分享(课表解析)
1.4K2
手把手教你抖音系列视频批量下载器开发
2.2K0
相关推荐
用Python制作一个随机抽奖小工具
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验