from dataclasses import dataclass import os os.environ['PYGAME_HIDE_SUPPORT_PROMPT'] = "hide" import pygame import sys pygame.init() width = 600 height = 900 num_display = 0 old_num_display = 0 num_float = False float_precision = 1 yellow = (240, 240, 20) white = (255, 255, 255) button_origin_x = 90 button_origin_y = 280 button_spacing = 140 @dataclass class Button: row: int column: int label: str key: int is_number: bool = False buttons = [ Button(3, 0, "0", pygame.K_0, True), Button(2, 0, "1", pygame.K_1, True), Button(2, 1, "2", pygame.K_2, True), Button(2, 2, "3", pygame.K_3, True), Button(1, 0, "4", pygame.K_4, True), Button(1, 1, "5", pygame.K_5, True), Button(1, 2, "6", pygame.K_6, True), Button(0, 0, "7", pygame.K_7, True), Button(0, 1, "8", pygame.K_8, True), Button(0, 2, "9", pygame.K_9, True), Button(3, 1, ".", pygame.K_PERIOD), Button(3, 2, "?", pygame.K_QUESTION), Button(0, 3, "<-", pygame.K_BACKSPACE), Button(1, 3, "AC", pygame.K_a), Button(2, 3, "C", pygame.K_c), Button(3, 3, "=", pygame.K_EQUALS), Button(4, 3, "*", pygame.K_ASTERISK), Button(4, 0, "+", pygame.K_PLUS), Button(4, 1, "-", pygame.K_MINUS), Button(4, 2, chr(247), pygame.K_BACKSPACE) ] print(buttons[0]) def draw_buttons(): for b in buttons: print(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, yellow, center, 50, 2) b_text = cheesy_font.render(b.label, True, white) text_x = center_x - (b_text.get_width() // 2) text_y = center_y - (b_text.get_height() // 2) if b.label == "*": text_y += 15 screen.blit(b_text, (text_x, text_y)) screen = pygame.display.set_mode((width, height)) pygame.display.set_caption('CheesyCalc') icon = pygame.image.load(os.path.join("img", "cheesy_icon_32x32.png")) icon.convert_alpha() pygame.display.set_icon(icon) logo = pygame.image.load(os.path.join("img", "cheesy.png")) logo.convert_alpha() screen.blit(logo, (30, 20)) cheesy_font = pygame.font.Font(os.path.join("font", "New Cheese.ttf"), 60) logo_text_1 = cheesy_font.render("Cheesy", True, yellow) logo_text_2 = cheesy_font.render("Calculator", True, yellow) screen.blit(logo_text_1, (width // 2 - logo_text_1.get_width() // 2 + 80, 0)) screen.blit(logo_text_2, (width // 2 - logo_text_2.get_width() // 2 + 80, 45)) sevenseg_font = pygame.font.Font(os.path.join("font", "DSEG7Modern-Bold.ttf"), 60) draw_buttons() while True: for event in pygame.event.get(): if event.type == pygame.QUIT or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE): pygame.quit() sys.exit() elif event.type == pygame.KEYDOWN and event.key == pygame.K_c: num_display = 0 float_precision = 1 elif event.type == pygame.KEYDOWN and (event.key == pygame.K_PERIOD or event.key == pygame.K_KP_PERIOD): #num_float = True pass elif event.type == pygame.KEYDOWN \ and ((event.key >= pygame.K_0 and event.key <= pygame.K_9) or (event.key >= pygame.K_KP1 and event.key <= pygame.K_KP0)) \ and len(str(num_display)) <= 10: if event.key == pygame.K_KP0: actual_key = pygame.K_0 elif event.key >= pygame.K_KP1 and event.key <= pygame.K_KP9: actual_key = event.key - 1073741864 else: actual_key = event.key if num_display == 0 and actual_key != pygame.K_0: num_display = int(chr(actual_key)) else: num_display = (num_display * 10) + int(chr(actual_key)) if num_display != old_num_display: print(f"Number: {num_display}") old_num_display = num_display pygame.draw.rect(screen, (0, 0, 0), pygame.Rect(12, 97, 576, 126)) num_show = (num_float == False) text = sevenseg_font.render(str(num_display) + ".", True, white) screen.blit(text, (580 - text.get_width(), 120)) pygame.draw.rect(screen, yellow, pygame.Rect(10, 100, 580, 110), 2) pygame.display.flip()