python小玩意——计算器

简介: python小玩意——计算器

代码说明:

python语言利用tk实现一个简易计算器

具有0~9十位数字、符号’.’,以及+-*/四则等运算功能,具有记忆存储功能(下一轮计算用到上一轮结果)、清零、删除功能。

效果如下:

在这里插入图片描述

代码如下:

import tkinter, time, decimal, math, string

root = tkinter.Tk()
root.title('计算器')
root.resizable(0, 0)
global cuncu, vartext, result, fuhao
result = fuhao = None
vartext = tkinter.StringVar()
cuncu = []


class anjianzhi:
    global cuncu, vartext, result, fuhao

    def __init__(self, anjian):
        self.anjian = anjian

    def jia(self):
        cuncu.append(self.anjian)
        vartext.set(''.join(cuncu))

    def tui(self):
        cuncu.pop()
        vartext.set(''.join(cuncu))

    def clear(self):
        cuncu.clear()
        vartext.set('')
        result = None
        fuhao = None

    def zhengfu(self):
        if cuncu[0]:
            if cuncu[0] == '-':
                cuncu[0] = '+'
            elif cuncu[0] == '+':
                cuncu[0] = '-'
            else:
                cuncu.insert(0, '-')
        vartext.set(''.join(cuncu))

    def xiaoshudian(self):
        if cuncu.count('.') >= 1:
            pass
        else:
            if cuncu == []:
                cuncu.append('0')
            cuncu.append('.')
            vartext.set(''.join(cuncu))

    def yunshuan(self):
        global cuncu, vartext, result, fuhao
        if vartext.get() == '':
            pass
        else:
            get1 = decimal.Decimal(vartext.get())
            if self.anjian in ('1/x', 'sqrt'):
                if self.anjian == '1/x':
                    result = 1 / get1
                elif self.anjian == 'sqrt':
                    result = math.sqrt(get1)
            elif self.anjian in ('+', '-', '*', '/', '='):
                if fuhao is not None:
                    get1 = decimal.Decimal(result)
                    get2 = decimal.Decimal(vartext.get())
                    if fuhao == '+':
                        result = get1 + get2
                    elif fuhao == '-':
                        result = get1 - get2
                    elif fuhao == '*':
                        result = get1 * get2
                    elif fuhao == '/':
                        result = get1 / get2
                else:
                    result = get1
                if self.anjian == '=':
                    fuhao = None
                else:
                    fuhao = self.anjian
            print(fuhao)
            print(result)
            vartext.set(str(result))
            cuncu.clear()


def copy1():
    # tkinter.Misc().clipboard_clear()
    tkinter.Misc().clipboard_append(string(vartext.get()))


def buju(root):
    global cuncu, vartext, result, fuhao
    entry1 = tkinter.Label(root, width=30, height=2, bg='white', anchor='se', textvariable=vartext)
    entry1.grid(row=0, columnspan=5)
    buttonMC = tkinter.Button(root, text='MC', width=5)
    buttonMR = tkinter.Button(root, text='MR', width=5)
    buttonMS = tkinter.Button(root, text='MS', width=5)
    buttonM1 = tkinter.Button(root, text='M+', width=5)
    buttonM2 = tkinter.Button(root, text='M-', width=5)
    buttonMC.grid(row=1, column=0)
    buttonMR.grid(row=1, column=1)
    buttonMS.grid(row=1, column=2)
    buttonM1.grid(row=1, column=3)
    buttonM2.grid(row=1, column=4)

    buttonJ = tkinter.Button(root, text='←', width=5, command=anjianzhi('c').tui)
    buttonCE = tkinter.Button(root, text='CE', width=5)
    buttonC = tkinter.Button(root, text=' C ', width=5, command=anjianzhi('c').clear)
    button12 = tkinter.Button(root, text='±', width=5, command=anjianzhi('c').zhengfu)
    buttonD = tkinter.Button(root, text='√', width=5, command=anjianzhi('sqrt').yunshuan)
    buttonJ.grid(row=2, column=0)
    buttonCE.grid(row=2, column=1)
    buttonC.grid(row=2, column=2)
    button12.grid(row=2, column=3)
    buttonD.grid(row=2, column=4)

    button7 = tkinter.Button(root, text=' 7 ', width=5, command=anjianzhi('7').jia)
    button8 = tkinter.Button(root, text=' 8 ', width=5, command=anjianzhi('8').jia)
    button9 = tkinter.Button(root, text=' 9 ', width=5, command=anjianzhi('9').jia)
    buttonc = tkinter.Button(root, text=' / ', width=5, command=anjianzhi('/').yunshuan)
    buttonf = tkinter.Button(root, text=' % ', width=5)
    button7.grid(row=3, column=0)
    button8.grid(row=3, column=1)
    button9.grid(row=3, column=2)
    buttonc.grid(row=3, column=3)
    buttonf.grid(row=3, column=4)

    button4 = tkinter.Button(root, text=' 4 ', width=5, command=anjianzhi('4').jia)
    button5 = tkinter.Button(root, text=' 5 ', width=5, command=anjianzhi('5').jia)
    button6 = tkinter.Button(root, text=' 6 ', width=5, command=anjianzhi('6').jia)
    buttonx = tkinter.Button(root, text=' * ', width=5, command=anjianzhi('*').yunshuan)
    buttonfs = tkinter.Button(root, text='1/x', width=5, command=anjianzhi('1/x').yunshuan)
    button4.grid(row=4, column=0)
    button5.grid(row=4, column=1)
    button6.grid(row=4, column=2)
    buttonx.grid(row=4, column=3)
    buttonfs.grid(row=4, column=4)

    button1 = tkinter.Button(root, text=' 1 ', width=5, command=anjianzhi('1').jia)
    button2 = tkinter.Button(root, text=' 2 ', width=5, command=anjianzhi('2').jia)
    button3 = tkinter.Button(root, text=' 3 ', width=5, command=anjianzhi('3').jia)
    button_ = tkinter.Button(root, text=' - ', width=5, command=anjianzhi('-').yunshuan)
    buttondy = tkinter.Button(root, text=' \n = \n ', width=5, command=anjianzhi('=').yunshuan)
    button1.grid(row=5, column=0)
    button2.grid(row=5, column=1)
    button3.grid(row=5, column=2)
    button_.grid(row=5, column=3)
    buttondy.grid(row=5, column=4, rowspan=2)

    button0 = tkinter.Button(root, text='   0   ', width=11, command=anjianzhi('0').jia)
    buttonjh = tkinter.Button(root, text=' . ', width=5, command=anjianzhi('c').xiaoshudian)
    buttonjia = tkinter.Button(root, text=' + ', width=5, command=anjianzhi('+').yunshuan)
    button0.grid(row=6, column=0, columnspan=2)
    buttonjh.grid(row=6, column=2)
    buttonjia.grid(row=6, column=3)


def caidan(root):
    menu = tkinter.Menu(root)
    submenu1 = tkinter.Menu(menu, tearoff=0)
    menu.add_cascade(label='查看', menu=submenu1)
    submenu2 = tkinter.Menu(menu, tearoff=0)
    submenu2.add_command(label='复制')
    submenu2.add_command(label='粘贴')
    menu.add_cascade(label='编辑', menu=submenu2)
    submenu = tkinter.Menu(menu, tearoff=0)
    submenu.add_command(label='查看帮助')
    submenu.add_separator()
    submenu.add_command(label='关于计算机')
    menu.add_cascade(label='帮助', menu=submenu)
    root.config(menu=menu)


buju(root)
caidan(root)
root.mainloop()
相关文章
|
6月前
|
Python
如何使用Python编写一个简单的计算器程序
如何使用Python编写一个简单的计算器程序
185 0
|
6月前
|
安全 Serverless Python
用Python实现计算器功能
用Python实现计算器功能
77 1
|
15天前
|
云计算 Python
用python给你写个简单的计算器功能网页啊
这张图片展示了阿里巴巴集团的组织架构图,涵盖了核心电商、云计算、数字媒体与娱乐、创新业务等主要板块,以及各板块下的具体业务单元和部门。
|
23天前
|
存储 IDE 数据处理
使用Python构建一个高级计算器
本文介绍如何使用Python和`tkinter`库构建一个高级计算器。该计算器支持基本运算(加、减、乘、除、求整、求余)、科学运算(平方根、幂等)以及简单的图形用户界面(GUI)。通过该项目,您将学习到如何处理用户输入、执行计算并显示结果。适合初学者提升编程技能。
|
6月前
|
Python
python tkinter 最简洁的计算器按钮排列
python tkinter 最简洁的计算器按钮排列
51 0
|
3月前
|
存储 数据可视化 Python
【python】python tkinter 计算器GUI版本(模仿windows计算器 源码)【独一无二】
【python】python tkinter 计算器GUI版本(模仿windows计算器 源码)【独一无二】
183 1
|
2月前
|
开发者 Python
Python 编程入门:从零到一实现简单计算器
【8月更文挑战第31天】 在这个数字技术日益发展的时代,编程已成为一项基础技能。本文通过构建一个简单的Python计算器项目,引导初学者步入编程世界的大门。我们将一起学习如何定义函数、处理用户输入以及执行基本算术操作,最终实现一个能够进行加减乘除运算的小工具。无论你是编程新手还是想复习基础知识的开发者,这篇文章都将为你提供一次愉快的编程体验。
|
3月前
|
开发者 Python
Python 编程入门:从零到一实现简单计算器
【8月更文挑战第31天】在这个数字技术日益发展的时代,编程已成为一项基础技能。本文通过构建一个简单的Python计算器项目,引导初学者步入编程世界的大门。我们将一起学习如何定义函数、处理用户输入以及执行基本算术操作,最终实现一个能够进行加减乘除运算的小工具。无论你是编程新手还是想复习基础知识的开发者,这篇文章都将为你提供一次愉快的编程体验。
|
3月前
|
Python
【Leetcode刷题Python】224. 基本计算器
LeetCode上题目“224. 基本计算器”的Python解决方案,通过使用栈来解析和计算包含加减运算及括号的算术表达式。
37 1
|
3月前
|
数据采集 iOS开发 Python
Chatgpt教你开发iPhone风格计算器,Python代码实现
Chatgpt教你开发iPhone风格计算器,Python代码实现