Python——计算器
目标
- 了解图形界面开发的基本要素
- 了解图形界面工作的基本原理
- 掌握 Tkinter 库的特点
- 理解 Tkinter 库的工作方式和原理
- 掌握Tkinter 界面开发的基本要素
- 掌握完整 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()