计算器功能与组成部分
基本功能创建简单的操作界面键盘快捷键屏幕和显示部分数字按钮和功能键负号和小数点的输入在数据中插入逗号核心计算部分次方运算返回和清除自定义设置
基本功能
一个简单的计算器需要一个简单操作界面、会运算加减乘除运算的基本功能、支持键盘快捷键入
创建简单的操作界面
操作界面用pygame完全可行 主程序如下:
import pygame
import sys
from settings import Settings
import functions as fu
from pygame.sprite import Group
from classs import *
from digital import *
def calculator():
pygame.init()
setting=Settings()
#创建设置参数
screen=pygame.display.set_mode((setting.screen_width,setting.screen_height))
pygame.display.set_caption('计算器')
#创建pygame主屏幕
calculator_screen=Calculator_screen(screen,setting)
#创建计算器屏幕,用于显示数字
buttons=Group()
#创建数字按钮编组
gnbuttons=Group()
#创建特殊按钮编组,比如+,-,×....
daorus=Group()
#创建用户自定义功能按钮
button_lei=fu.digital_button(screen,setting,buttons)
#将所有数字按钮存储在一个列表中
gn_button_lei=fu.gn_button(screen,setting,gnbuttons)
#将所有特殊按钮存储在一个列表中
daoru_lei=fu.daoru_button(screen,setting,daorus)
#将用户自定义功能按钮存储在一个列表中
digital=Digital_jihe()
#创建用于显示的数字
shu=Shu(screen,setting,calculator_screen,digital)
#创建用于在计算器屏幕上显示的数字
tips=Tips(calculator_screen,setting,screen,shu)
#创建提示标记,显示必要时要提醒的信息
while True:
"""开始屏幕主循环"""
screen.fill(setting.bg_color)
#用颜色填充屏幕
fu.check_events(button_lei,gn_button_lei,calculator_screen,
digital,shu,setting,tips,daoru_lei)
#检测鼠标与键盘响应事件
fu.update_screen(calculator_screen,buttons,
gnbuttons,screen,shu,tips,daorus)
#持续更新屏幕内容
calculator()
实际运行效果: 数字键和加减乘除等功能键是分开的,底部按钮用于导入导出计算器的参数设置为txt文件,方便使用者自行修改部分设置。
键盘快捷键
加减乘除:→/←/↑/↓ 等号:enter 后退:backspace 清除:空格 次方符号:左shift 导入:F1 导出:F2 负号:, 小数点:. 数字:数字键+小键盘数字键
鼠标和键盘操作部分:
def check_events(button_lei,gn_button_lei,calculator_screen,
digital,shu,setting,tips,daoru_lei):
"""检测鼠标和键盘事件"""
x=check_edges(calculator_screen,digital,shu)
y=check_dier_edges(calculator_screen,digital,shu)
for event in pygame.event.get():
if event.type==pygame.QUIT:
sys.exit(0)
if event.type==pygame.KEYDOWN:
keydown(event,button_lei,gn_button_lei,setting,
digital,shu,calculator_screen,x,y,tips,daoru_lei)
if event.type==pygame.KEYUP:
keyup(event,button_lei,gn_button_lei,setting,daoru_lei)
if event.type==pygame.MOUSEBUTTONDOWN:
mouse_x,mouse_y=pygame.mouse.get_pos()
mousedown(event,mouse_x,mouse_y,button_lei,gn_button_lei,
calculator_screen,digital,shu,setting,x,y,tips,daoru_lei)
if event.type==pygame.MOUSEBUTTONUP:
mouse_x,mouse_y=pygame.mouse.get_pos()
mouseup(event,mouse_x,mouse_y,button_lei,gn_button_lei,setting,daoru_lei)
def keydown(event,button_lei,gn_button_lei,setting,
digital,shu,calculator_screen,x,y,tips,daoru_lei):
"""响应键盘按下事件"""
if event.key==pygame.K_ESCAPE:
sys.exit(0)
elif event.key==pygame.K_9 or event.key==pygame.K_KP9:
k.button_click(calculator_screen,button_lei,setting,digital,shu,x,y,9)
elif event.key==pygame.K_8 or event.key==pygame.K_KP8:
k.button_click(calculator_screen,button_lei,setting,digital,shu,x,y,8)
elif event.key==pygame.K_7 or event.key==pygame.K_KP7:
k.button_click(calculator_screen,button_lei,setting,digital,shu,x,y,7)
elif event.key==pygame.K_6 or event.key==pygame.K_KP6:
k.button_click(calculator_screen,button_lei,setting,digital,shu,x,y,6)
elif event.key==pygame.K_5 or event.key==pygame.K_KP5:
k.button_click(calculator_screen,button_lei,setting,digital,shu,x,y,5)
elif event.key==pygame.K_4 or event.key==pygame.K_KP4:
k.button_click(calculator_screen,button_lei,setting,digital,shu,x,y,4)
elif event.key==pygame.K_3 or event.key==pygame.K_KP3:
k.button_click(calculator_screen,button_lei,setting,digital,shu,x,y,3)
elif event.key==pygame.K_2 or event.key==pygame.K_KP2:
k.button_click(calculator_screen,button_lei,setting,digital,shu,x,y,2)
elif event.key==pygame.K_1 or event.key==pygame.K_KP1:
k.button_click(calculator_screen,button_lei,setting,digital,shu,x,y,1)
elif event.key==pygame.K_0 or event.key==pygame.K_KP0:
k.button_click(calculator_screen,button_lei,setting,digital,shu,x,y,0)
elif event.key==pygame.K_BACKSPACE:
k.button_tui_click(calculator_screen,gn_button_lei,setting,digital,shu)
elif event.key==pygame.K_KP_PLUS or event.key==pygame.K_RIGHT:
k.gnbutton_click(gn_button_lei,setting,digital,shu,calculator_screen,'+')
elif event.key==pygame.K_KP_MINUS or event.key==pygame.K_LEFT:
k.gnbutton_click(gn_button_lei,setting,digital,shu,calculator_screen,'-')
elif event.key==pygame.K_KP_MULTIPLY or event.key==pygame.K_UP:
k.gnbutton_click(gn_button_lei,setting,digital,shu,calculator_screen,'×')
elif event.key==pygame.K_KP_DIVIDE or event.key==pygame.K_DOWN:
k.gnbutton_click(gn_button_lei,setting,digital,shu,calculator_screen,'÷')
elif event.key==pygame.K_LSHIFT:
k.gnbutton_click(gn_button_lei,setting,digital,shu,calculator_screen,'^')
elif event.key==pygame.K_EQUALS:
k.button_deng_click(gn_button_lei,setting,digital,shu,tips)
elif event.key==pygame.K_RETURN:
k.button_deng_click(gn_button_lei,setting,digital,shu,tips)
elif event.key==pygame.K_KP_ENTER:
k.button_deng_click(gn_button_lei,setting,digital,shu,tips)
elif event.key==pygame.K_c:
k.button_qing_click(gn_button_lei,setting,digital,shu,calculator_screen)
elif event.key==pygame.K_SPACE:
k.button_qing_click(gn_button_lei,setting,digital,shu,calculator_screen)
elif event.key==pygame.K_COMMA:
k.button_fu_click(button_lei,setting,digital,shu)
elif event.key==pygame.K_PERIOD or event.key==pygame.K_KP_PERIOD:
k.button_pot_click(button_lei,setting,digital,shu)
elif event.key==pygame.K_F1:
k.daoru_click(setting,daoru_lei)
elif event.key==pygame.K_F2:
k.daochu_click(setting,daoru_lei,tips,shu)
def keyup(event,button_lei,gn_button_lei,setting,daoru_lei):
"""响应键盘松开"""
for x in button_lei:
x.color=setting.button_color
for x in gn_button_lei[:7]:
x.color=setting.gnbutton_color
for x in daoru_lei:
x.color=setting.daoru_color
gn_button_lei[7].color=setting.deng_color
def mouseup(event,mouse_x,mouse_y,button_lei,
gn_button_lei,setting,daoru_lei):
"""响应鼠标按钮松开"""
for x in button_lei:
x.color=setting.button_color
for x in gn_button_lei[:7]:
x.color=setting.gnbutton_color
for x in daoru_lei:
x.color=setting.daoru_color
gn_button_lei[7].color=setting.deng_color
def mousedown(event,mouse_x,mouse_y,button_lei,gn_button_lei,
calculator_screen,digital,shu,setting,x,y,tips,daoru_lei):
"""响应鼠标按下"""
button_9_click=button_lei[9].rect.collidepoint(mouse_x,mouse_y)
button_8_click=button_lei[8].rect.collidepoint(mouse_x,mouse_y)</