Python——计算器

Python——计算器

目标

  1. 了解图形界面开发的基本要素
  2. 了解图形界面工作的基本原理
  3. 掌握 Tkinter 库的特点
  4. 理解 Tkinter 库的工作方式和原理
  5. 掌握Tkinter 界面开发的基本要素
  6. 掌握完整 Tkinter 界面程序的开发能力

要求

本实验以 Python 基本的 GUI 库 Tkinter 为基础,实现一个简易计数器程序,效果图如下。要求能够实现基本的四则运算,具备除 0 错误提示,实现归零操作
在这里插入图片描述

代码

#树莓派实验——基于Tkinter的图形化编程实验
import time
from tkinter import *
import tkinter as tk
import tkinter.font as tkFont
from functools import partial
#偏函数(Partial function)是通过将一个函数的部分参数预先绑定为某些值,从而得到一个新的具有较少可变参数的函数。
import math
'''
* 函数名称:button_input(entry,argu):
* 功能:向文本框组件中插入数据
* 参数含义:
        entry: 文本框组件
        argu:   文本数据
'''
def button_input(entry, argu):
    entry.insert(END, argu)  # 向文本框的尾部插入文本数据
'''
* 函数名称:Backspace(entry):
* 功能:删除操作
* 参数含义:
        entry: 文本框组件
'''
def Backspace(entry):
    input_len = len(entry.get())  # 获取文本框中内容的长度
    entry.delete(input_len-1)  # 删除文本框内容中的最后一项
'''
* 函数名称:clear(entry):
* 功能:清空操作
* 参数含义:
        entry: 文本框组件
'''
def clear(entry):
    entry.delete(0, END)  # 清空文本框中的内容
'''
* 函数名称:get_result(entry):
* 功能:计算表达式
* 参数含义:
        entry: 文本框组件
'''
def get_result(entry):
    input = entry.get()
    try:
        out = eval(input.strip())  # 调用eval函数,返回字符串表达式的计算结果
    except:  # 如果异常,即无法计算
        output = str('ERROR')  # 则输出“ERROR”
    else:
        output = str(out)  # 将计算结果以字符串形式存储
    clear(entry)  # 清空文本框
    entry.insert(END, output)  # 向文本框尾部插入计算结果
'''
* 函数名称:主函数
* 功能:绘制计算器界面,添加监听响应函数
* 参数含义:
'''
if __name__ == '__main__':
    window = tk.Tk()  # 创建tk窗口
    window.title('简易计算器')
    window.resizable(1, 1)  # 设置自适应自配尺寸
    entry_font = tkFont.Font(size=12)  # 设置文本框字体大小
    entry = Entry(window, justify='right', font=entry_font)  # 创建文本框组件
    entry.grid(row=0, column=0, columnspan=5,
               sticky=W+E+N+S, padx=5, pady=5)  # 放入相应位置
    #更改按钮的默认设置
    button_font = tkFont.Font(size=10, weight=tkFont.BOLD)  # 设置按钮组件的文本字体和大小
    button_bg = 'white'  # 设置按钮的背景色
    button_active_bg = 'blue'  # 设置按钮被按下时的背景色
    myButton = partial(Button, window, bg=button_bg, padx=10,
                       pady=3, activebackground=button_active_bg)
    #用partial函数,将创建Button时的一些参数固定,变成新的Button组件构造函数myButton
    # 创建button0,对应“0”按钮
    button0 = myButton(text='0 ', command=lambda: button_input(entry, '0'))  
    button0.grid(row=4, column=0, pady=5, padx=5)
    # 创建button00,对应“00”按钮
    button00 = myButton(text='00', command=lambda: button_input(entry, '00'))  
    button00.grid(row=4, column=1, pady=5, padx=5)
    # 创建button1,对应“1”按钮
    button1 = myButton(text='1 ', command=lambda: button_input(entry, '1'))  
    button1.grid(row=3, column=0, pady=5, padx=5)
    # 创建button2,对应“2”按钮
    button2 = myButton(text='2 ', command=lambda: button_input(entry, '2'))  
    button2.grid(row=3, column=1, pady=5, padx=5)
    # 创建button3,对应“3”按钮
    button3 = myButton(text='3 ', command=lambda: button_input(entry, '3'))  
    button3.grid(row=3, column=2, pady=5, padx=5)
    # 创建button4,对应“4”按钮
    button4 = myButton(text='4 ', command=lambda: button_input(entry, '4'))  
    button4.grid(row=2, column=0, pady=5, padx=5)
    # 创建button5,对应“5”按钮
    button5 = myButton(text='5 ', command=lambda: button_input(entry, '5'))  
    button5.grid(row=2, column=1, pady=5, padx=5)
    # 创建button6,对应“6”按钮
    button6 = myButton(text='6 ', command=lambda: button_input(entry, '6'))  
    button6.grid(row=2, column=2, pady=5, padx=5)
    # 创建button7,对应“7”按钮
    button7 = myButton(text='7 ', command=lambda: button_input(entry, '7')) 
    button7.grid(row=1, column=0, pady=5, padx=5)
    # 创建button8,对应“8”按钮
    button8 = myButton(text='8 ', command=lambda: button_input(entry, '8'))  
    button8.grid(row=1, column=1, pady=5, padx=5)
    # 创建button9,对应“9”按钮
    button9 = myButton(text='9 ', command=lambda: button_input(entry, '9'))  
    button9.grid(row=1, column=2, pady=5, padx=5)
    # 创建button10,对应“+”按钮
    button10 = myButton(text='+ ', command=lambda: button_input(entry, '+'))
    button10.grid(row=1, column=3, pady=5, padx=5)
    # 创建button11,对应“-”按钮
    button11 = myButton(text='- ', command=lambda: button_input(entry, '-'))
    button11.grid(row=2, column=3, pady=5, padx=5)
    # 创建button12,对应“*”按钮
    button12 = myButton(text='* ', command=lambda: button_input(entry, '*'))
    button12.grid(row=3, column=3, pady=5, padx=5)
    # 创建button13,对应“/”按钮
    button13 = myButton(text='/ ', command=lambda: button_input(entry, '/'))
    button13.grid(row=4, column=3, pady=5, padx=5)
    # 创建button14,对应“.”按钮
    button14 = myButton(text='. ', command=lambda: button_input(entry, '.'))  
    button14.grid(row=4, column=2, pady=5, padx=5)
    # 创建button15,对应“删除”按钮
    button15 = myButton(text='删除 ', command=lambda: Backspace(entry))
    button15.grid(row=1, column=4, pady=5, padx=5)
    # 创建button16,对应“清零”按钮
    button16 = myButton(text='清零', command=lambda: clear(entry))
    button16.grid(row=2, column=4, pady=5, padx=5)
    # 创建button17,对应“等于”按钮
    button17 = myButton(text='= ', command=lambda: get_result(entry))
    button17.grid(row=3, column=4, pady=5, padx=5)
    # 创建button18,对应“清除”按钮
    button18 = myButton(text='清除', command=lambda: clear(entry))
    button18.grid(row=4, column=4, pady=5, padx=5)
    window.mainloop()

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值