import pygame
pygame.init()
display_width = 1024
display_height = 600
display = pygame.display.set_mode((display_width,display_height))
blue = (0,0,200)
light_blue = (0,0,255)
black = (0,0,0)
red = (200,0,0,255)
light_red = (255,0,0)
white = (255,255,255)
light_purple = (139,0,139,255)
purple = (128,0,128,255)
smallfont = pygame.font.SysFont("comicsansms", 50)
medfont = pygame.font.SysFont("Algerian", 50)
largefont = pygame.font.SysFont("Algerian", 85)
altSmall = pygame.font.SysFont("Algerian",20)
altMed = pygame.font.SysFont("Algerian",30)
altLarge = pygame.font.SysFont("Algerian",75)
extrasmall = pygame.font.SysFont("comicsansms",15)
clock = pygame.time.Clock()
def text_objects(text, color,size = "small"):
textSurface = smallfont.render(text, True, black)
if size == "small":
textSurface = smallfont.render(text, True, color)
if size == "medium":
textSurface = medfont.render(text, True, color)
if size == "large":
textSurface = largefont.render(text, True, color)
if size == "altMed":
textSurface = altMed.render(text,True,color)
if size == "altSmall":
textSurface = altSmall.render(text,True,color)
if size == "medFont":
textSurface = medfont.render(text,True,color)
if size == "smallFont":
textSurface = smallfont.render(text,True,color)
if size == "extraSmall":
textSurface = extrasmall.render(text,True,color)
return textSurface, textSurface.get_rect()
def alt_med_pos_message_to_screen(msg,color,x,y,size = "smallfont"):
screen_text = smallfont.render(msg,True,color)
display.blit(screen_text,[x,y])
class Button():
text = str()
x = int()
y = int()
width = int()
height = int()
inactive_color = None
active_color = None
action = str()
active = bool()
def __init__(self,text,x,y,width,height,inactive_color,active_color,action,text_color,text_size,active):
self.text = text
self.x = x
self.y = y
self.width = width
self.height = height
self.inactive_color = inactive_color
self.active_color = active_color
self.action = action
self.text_color = text_color
self.text_size = text_size
self.active = active
def nothing():
pass
def handle_event(self,event):
if self.is_hovered() and event.type == pygame.MOUSEBUTTONDOWN:
self.action()
def text_to_button(self,surface):
textSurf, textRect = text_objects(self.text,self.text_color,self.text_size)
textRect.center = ((self.x+(self.width/2)), self.y+(self.height/2))
surface.blit(textSurf, textRect)
def is_hovered(self):
cur = pygame.mouse.get_pos()
return self.x + self.width > cur[0] > self.x and self.y + self.height > cur[1] > self.y
def drawButton(self, surface):
if self.active:
pygame.draw.rect(surface,self.inactive_color,[self.x,self.y,self.width,self.height])
if self.is_hovered() and self.active:
pygame.draw.rect(surface, self.active_color,[self.x,self.y,self.width,self.height])
self.text_to_button(surface)
def home_screen():
backgroundImg = 'C:/Users/student/Desktop/Geometry Calc/Images/programbackground.png'
statisticsImg = 'C:/Users/student/Desktop/Geometry Calc/Images/statistics.png'
algebraImg = 'C:/Users/student/Desktop/Geometry Calc/Images/algebra-math.png'
geometryImg = 'C:/Users/student/Desktop/Geometry Calc/Images/geometry.png'
background = pygame.image.load(backgroundImg)
statistics = pygame.image.load(statisticsImg)
algebra = pygame.image.load(algebraImg)
geometry = pygame.image.load(geometryImg)
homeScreen = True
StatisticsButton = Button("Statistics",100,250,250,85,purple,light_purple,statistics_formulas,black,"smallfont",True)
GeometryButton = Button("Geometry",100,315,250,85,purple,light_purple,geometry_formulas,black,"smallfont",True)
AlgebraButton = Button("Algebra",100,390,250,75,purple,light_purple,algebra_formulas,black,"smallfont",True)
while homeScreen:
for evt in pygame.event.get():
StatisticsButton.handle_event(evt)
GeometryButton.handle_event(evt)
AlgebraButton.handle_event(evt)
if evt.type == pygame.QUIT:
homeScreen = False
pygame.quit()
quit()
display.blit(background,[0,0])
alt_med_pos_message_to_screen("Formula Hack",red,display_width/2-150,100,size = "smallfont")
StatisticsButton.drawButton(display)
GeometryButton.drawButton(display)
AlgebraButton.drawButton(display)
display.blit(statistics,[350,250])
display.blit(geometry,[350,325])
display.blit(algebra,[350,400])
pygame.display.update()
def statistics_formulas():
inStatistics = True
backgroundImg ='C:/Users/student/Desktop/Geometry Calc/Images/StatisticsBackground.png'
Zscore = Button("1. Z-score",900,25,75,35,purple,light_purple,zscore,black,"extraSmall",True)
statsBackground = pygame.image.load(backgroundImg)
while inStatistics:
for evt in pygame.event.get():
Zscore.handle_event(evt)
if evt.type == pygame.QUIT:
inStatistics = False
pygame.quit()
quit()
display.blit(statsBackground,[0,0])
Zscore.drawButton(display)
pygame.display.update()
def geometry_formulas():
print("geometry")
def algebra_formulas():
print("algebra")
def zscore():
screen = pygame.display.set_mode((display_width, display_height))
font = pygame.font.Font(None, 32)
clock = pygame.time.Clock()
input_box = pygame.Rect(100, 100, 140, 32)
color_inactive = pygame.Color('lightskyblue3')
color_active = pygame.Color('dodgerblue2')
color = color_inactive
active = False
text = "0"
done = False
input1 = int(text)
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
if event.type == pygame.MOUSEBUTTONDOWN:
# If the user clicked on the input_box rect.
if input_box.collidepoint(event.pos):
# Toggle the active variable.
active = not active
else:
active = False
# Change the current color of the input box.
color = color_active if active else color_inactive
if event.type == pygame.KEYDOWN:
if active:
if event.key == pygame.K_RETURN:
text = ""
elif event.key == pygame.K_BACKSPACE:
text = text[:-1]
else:
text += event.unicode
screen.fill((30, 30, 30))
# Render the current text.
txt_surface = font.render(text, True, color)
# Resize the box if the text is too long.
width = max(200, txt_surface.get_width()+10)
input_box.w = width
# Blit the text.
screen.blit(txt_surface, (input_box.x+5, input_box.y+5))
# Blit the input_box rect.
pygame.draw.rect(screen, color, input_box, 2)
pygame.display.flip()
clock.tick(30)
home_screen()
If it helps at all to know, I need to only store integer, values, thanks! The main section of the code that the problem lies is near the bottom under the function "zScore", but it does use some of the classes created throughout the code. Any help is appreciated.
What I tried to do at first is store the variable text in another variable and do basic operations using this input variable, but of course the input box just accepts strings. I then tried to use the int() function to try to convert the string entered into the input box into an integer but this did not work either. I haven't been able to use multiple input boxes on the same screen either.