Handle mouse clicks on buttons. Change button background color.
This commit is contained in:
parent
b1cfa8b67d
commit
d1dc241213
|
@ -1,5 +1,6 @@
|
|||
from dataclasses import dataclass
|
||||
from datetime import datetime
|
||||
import math
|
||||
import os
|
||||
os.environ['PYGAME_HIDE_SUPPORT_PROMPT'] = "hide"
|
||||
import pygame
|
||||
|
@ -26,6 +27,7 @@ button_origin_x = 90
|
|||
button_origin_y = 280
|
||||
button_spacing = 140
|
||||
button_radius = 50
|
||||
button_background = (60, 60, 60)
|
||||
|
||||
@dataclass
|
||||
class Button:
|
||||
|
@ -122,7 +124,7 @@ def flash_button(b):
|
|||
center_x = button_origin_x + (b.column * button_spacing)
|
||||
center_y = button_origin_y + (b.row * button_spacing)
|
||||
center = (center_x, center_y)
|
||||
pygame.draw.circle(screen, background, center, button_radius, 4)
|
||||
pygame.draw.circle(screen, button_background, center, button_radius, 4)
|
||||
pygame.draw.circle(screen, yellow, center, button_radius, 2)
|
||||
b.flashing = False
|
||||
|
||||
|
@ -132,6 +134,7 @@ def draw_buttons():
|
|||
b.center_x = button_origin_x + (b.column * button_spacing)
|
||||
b.center_y = button_origin_y + (b.row * button_spacing)
|
||||
center = (b.center_x, b.center_y)
|
||||
pygame.draw.circle(screen, button_background, center, button_radius)
|
||||
pygame.draw.circle(screen, yellow, center, button_radius, 2)
|
||||
b_text = cheesy_font.render(b.label, True, white)
|
||||
text_x = b.center_x - (b_text.get_width() // 2)
|
||||
|
@ -164,31 +167,41 @@ while True:
|
|||
if event.type == pygame.QUIT:
|
||||
pygame.quit()
|
||||
sys.exit()
|
||||
if event.type == pygame.KEYDOWN:
|
||||
if event.key == pygame.K_ESCAPE:
|
||||
mouse_click = None
|
||||
if event.type == pygame.MOUSEBUTTONDOWN:
|
||||
mouse_x, mouse_y = pygame.mouse.get_pos()
|
||||
for key, b in buttons.items():
|
||||
if math.hypot(mouse_x - b.center_x, mouse_y - b.center_y) <= button_radius:
|
||||
mouse_click = b.key
|
||||
if event.type == pygame.KEYDOWN or not mouse_click is None:
|
||||
if mouse_click is None:
|
||||
my_key = event.key
|
||||
else:
|
||||
my_key = mouse_click
|
||||
if my_key == pygame.K_ESCAPE:
|
||||
pygame.quit()
|
||||
sys.exit()
|
||||
elif event.key == pygame.K_c:
|
||||
elif my_key == pygame.K_c:
|
||||
display_num_whole = clear_display
|
||||
display_num_decimal = ""
|
||||
num_float = False
|
||||
float_precision = 1
|
||||
flash_button(buttons[str(event.key)])
|
||||
elif event.key == pygame.K_a:
|
||||
flash_button(buttons[str(my_key)])
|
||||
elif my_key == pygame.K_a:
|
||||
display_num_whole = clear_display
|
||||
display_num_decimal = ""
|
||||
num_float = False
|
||||
float_precision = 1
|
||||
flash_button(buttons[str(event.key)])
|
||||
elif event.key == pygame.K_PERIOD or event.key == pygame.K_KP_PERIOD:
|
||||
flash_button(buttons[str(my_key)])
|
||||
elif my_key == pygame.K_PERIOD or my_key == pygame.K_KP_PERIOD:
|
||||
actual_key = pygame.K_PERIOD
|
||||
flash_button(buttons[str(actual_key)])
|
||||
num_float = True
|
||||
elif event.key in valid_keys_equals and not pygame.key.get_mods() & pygame.KMOD_SHIFT:
|
||||
elif my_key in valid_keys_equals and not pygame.key.get_mods() & pygame.KMOD_SHIFT:
|
||||
actual_key = pygame.K_EQUALS
|
||||
flash_button(buttons[str(actual_key)])
|
||||
elif event.key == pygame.K_BACKSPACE:
|
||||
flash_button(buttons[str(event.key)])
|
||||
elif my_key == pygame.K_BACKSPACE:
|
||||
flash_button(buttons[str(my_key)])
|
||||
if num_float == True:
|
||||
if display_num_decimal == "":
|
||||
num_float = False
|
||||
|
@ -203,23 +216,23 @@ while True:
|
|||
display_num_whole = display_num_whole[:-1]
|
||||
elif display_num_whole != "0":
|
||||
display_num_whole = "0"
|
||||
elif (event.key == pygame.K_EQUALS and pygame.key.get_mods() & pygame.KMOD_SHIFT) or event.key == pygame.K_KP_PLUS:
|
||||
elif (my_key == pygame.K_EQUALS and pygame.key.get_mods() & pygame.KMOD_SHIFT) or my_key == pygame.K_KP_PLUS:
|
||||
actual_key = pygame.K_PLUS
|
||||
flash_button(buttons[str(actual_key)])
|
||||
elif event.key == pygame.K_MINUS or event.key == pygame.K_KP_MINUS:
|
||||
elif my_key == pygame.K_MINUS or my_key == pygame.K_KP_MINUS:
|
||||
actual_key = pygame.K_MINUS
|
||||
flash_button(buttons[str(actual_key)])
|
||||
elif (event.key == pygame.K_8 and pygame.key.get_mods() & pygame.KMOD_SHIFT) or event.key == pygame.K_KP_MULTIPLY:
|
||||
elif (my_key == pygame.K_8 and pygame.key.get_mods() & pygame.KMOD_SHIFT) or my_key == pygame.K_KP_MULTIPLY:
|
||||
actual_key = pygame.K_ASTERISK
|
||||
flash_button(buttons[str(actual_key)])
|
||||
elif event.key == pygame.K_SLASH or event.key == pygame.K_KP_DIVIDE:
|
||||
elif my_key == pygame.K_SLASH or my_key == pygame.K_KP_DIVIDE:
|
||||
actual_key = pygame.K_SLASH
|
||||
flash_button(buttons[str(actual_key)])
|
||||
elif event.key in valid_keys_numbers:
|
||||
if str(event.key) in keypad_map.keys():
|
||||
actual_key = keypad_map[str(event.key)]
|
||||
elif my_key in valid_keys_numbers:
|
||||
if str(my_key) in keypad_map.keys():
|
||||
actual_key = keypad_map[str(my_key)]
|
||||
else:
|
||||
actual_key = event.key
|
||||
actual_key = my_key
|
||||
flash_button(buttons[str(actual_key)])
|
||||
if len(display_num_whole) <= 10:
|
||||
if num_float == False:
|
||||
|
@ -230,10 +243,10 @@ while True:
|
|||
else:
|
||||
display_num_decimal += chr(actual_key)
|
||||
if display_num_whole != old_display_num_whole or display_num_decimal != old_display_num_decimal:
|
||||
print(f"Number: {display_num_whole}", end='')
|
||||
if num_float == True:
|
||||
print(".", end='')
|
||||
print(display_num_decimal)
|
||||
#print(f"Number: {display_num_whole}", end='')
|
||||
#if num_float == True:
|
||||
# print(".", end='')
|
||||
#print(display_num_decimal)
|
||||
old_display_num_whole = display_num_whole
|
||||
old_display_num_decimal = display_num_decimal
|
||||
pygame.draw.rect(screen, black, pygame.Rect(10, 100, width - 20, 110))
|
||||
|
|
Loading…
Reference in New Issue
Block a user