0

so i've been working on my first GUI project since the past week now and i've been using pygame for that.Now i know pygame is for GAMES but still i tried to make a decent APP GUI using it.

import pygame 

pygame.init()
screen = pygame.display.set_mode((600,600))
app_fps = pygame.time.Clock()
bg = pygame.image.load('GUI/assets/login_bg.jpg')
font = pygame.font.Font(None,32)
active_color = pygame.Color('dodgerblue2')
inactive_color = pygame.Color('white')
back_button = pygame.image.load('GUI/assets/back_button.png')

class InputBox():
    def __init__(self,max_len,x,y,width,height,text = ''):
        self.color = inactive_color
        self.len = max_len
        self.rect = pygame.Rect(x,y,width,height)
        self.text = text 
        self.text_surf = font.render(text,True,self.color)
        self.active = False
def event_handler(self,event):
    if event.type == pygame.MOUSEBUTTONDOWN:
        if self.rect.collidepoint(event.pos):
            self.active = not self.active 
        else:
            self.active = False
    self.color = active_color if self.active else inactive_color

    if event.type == pygame.KEYDOWN:
        if self.active:
            if event.key == pygame.K_RETURN:
                print(self.text)
                self.text = ''
            elif event.key == pygame.K_BACKSPACE or len(self.text)>self.len:
                self.text = self.text[:-1]
            else:
                self.text += event.unicode
            
            self.text_surf = font.render(self.text,True,self.color)

def draw(self,screen):
    screen.blit(self.text_surf, (self.rect.x+5,self.rect.y+5))
    pygame.draw.rect(screen,self.color,self.rect,2,border_radius=2)

def update(self):
    width = max(200, self.text_surf.get_width()+10)
    self.rect.w = width 

back_rect = pygame.Rect(30,30,45,45)

def login():
    inputbox = InputBox(15,180,305,140,32)
    running = True
    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:
                    running = False 
            if event.type == pygame.MOUSEBUTTONDOWN:
                if back_rect.collidepoint(event.pos):
                    running = False  
            inputbox.event_handler(event)
        
        screen.blit(bg,(-167,0))
        screen.blit(back_button,(back_rect.topleft,back_rect.bottomleft))
        

        inputbox.draw(screen)
        inputbox.update()

        pygame.display.update()
        app_fps.tick(60)

so i just made a class to take input from the user quite easily but now im not sure how can i make it wrap itself inside the app resolution. As i keep typing the text goes out of the screen.

image

i also looked up on google but couldn't find any method in pygame to take inputs like that. A little help would be really appreciated! Thanks

PsyQuake
  • 45
  • 8

0 Answers0