深圳幻海软件技术有限公司 欢迎您!

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

2023-02-28

大家好,我是Python进阶者。前言前几天在Python交流群里边,【🌑(这是月亮的背面)】大佬分享了一个有趣的代码,用于PySimpleGUI库打造了一款简易计算器,觉得挺有意思,非常适合入门PySimpleGUI的小伙伴们学习,这里拿出来给大家分享一波。实现过程这里直接上代码,如下所示:复制i

大家好,我是Python进阶者。

前言

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

实现过程

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

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()
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.

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

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

总结

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