es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo usar una variable de clase fuera de la clase

Estoy tratando de hacer una clase de botón en pygame y python, pero no sé cómo poner el código para que cuando haga clic en el botón, se ejecute el código.

El código que quiero ejecutar es:

num1 = 1
num2 = 100
num2 = int(rand)-1
rand =  (num1+num2)//2
text_screen(str(rand),"#DEA33E",font2,795,185)
pygame.display.update()

Y esta es la clase de Botón:

“`
class Button2:
def init(self,text,width,height,pos,elevation):
# Atributos principales
self.pressed = False
self.elevation = elevation
self.dynamic_elevation = elevation
self.original_y_pos = pos[1]

    # Rectángulo superior
    self.top_rect = pygame.Rect(pos,(width,height))
    self.top_color = "#475F77"

    # Rectángulo inferior
    self.bottom_rect = pygame.Rect(pos,(width,elevation))
    self.bottom_color = "#354B5E"

    # Texto
    self.text_surf = font3.render(text, True, "#FFFFFF")
    self.text_rect = self.text_surf.get_rect(center = self.top_rect.center)

def draw(self):
    # Lógica de elevación
    ot = 1
    ot = ot + 0
    self.top_rect.y = self.original_y_pos - self.dynamic_elevation
    self.text_rect.center = self.top_rect.center
    self.bottom_rect.midtop = self.top_rect.midtop
    self.bottom_rect.height = self.top_rect.height + self.dynamic_elevation

    pygame.draw.rect(screen,self.bottom_color,self.bottom_rect,border_radius = 12)
    pygame.draw.rect(screen,self.top_color,self.top_rect,border_radius=12)
    screen.blit(self.text_surf,self.text_rect)
    self.check_click()

def check_click(self):
    mouse_pos = pygame.mouse.get_pos()
    if self.top_rect.collidepoint(mouse_pos):
        self.top_color = "#D74B4B"
        if pygame.mouse.get_pressed()[0]:
            self.dynamic_elevation = 0
            self.pressed = True
        else:
            self.dynamic_elevation = self.elevation
            if self.pressed == True:
                self.pressed = False

También quiero hacerlo de tal manera que pueda usar las variables rand y num1, num2 fuera de la clase.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para ejecutar el código especificado cuando se hace clic en el botón, simplemente puede agregar el código en el método check_click donde se detecta el clic. Aquí está la clase Button2 modificada:

    class Button2:
        def __init__(self,text,width,height,pos,elevation,num1,num2):
            # Atributos principales
            self.pressed = False
            self.elevation = elevation
            self.dynamic_elevation = elevation
            self.original_y_pos = pos[1]
    
            # Rectángulo superior
            self.top_rect = pygame.Rect(pos,(width,height))
            self.top_color = "#475F77"
    
            # Rectángulo inferior
            self.bottom_rect = pygame.Rect(pos,(width,elevation))
            self.bottom_color = "#354B5E"
    
            # Texto
            self.text_surf = font3.render(text, True, "#FFFFFF")
            self.text_rect = self.text_surf.get_rect(center = self.top_rect.center)
    
            # Variables numéricas
            self.num1 = num1
            self.num2 = num2
            self.rand = None
    
        def draw(self):
            # Lógica de elevación
            ot = 1
            ot = ot + 0
            self.top_rect.y = self.original_y_pos - self.dynamic_elevation
            self.text_rect.center = self.top_rect.center
    
            self.bottom_rect.midtop = self.top_rect.midtop
            self.bottom_rect.height = self.top_rect.height + self.dynamic_elevation
    
            pygame.draw.rect(screen,self.bottom_color,self.bottom_rect,border_radius = 12)
            pygame.draw.rect(screen,self.top_color,self.top_rect,border_radius=12)
            screen.blit(self.text_surf,self.text_rect)
            self.check_click()
    
        def check_click(self):
            mouse_pos = pygame.mouse.get_pos()
            if self.top_rect.collidepoint(mouse_pos):
                self.top_color = "#D74B4B"
                if pygame.mouse.get_pressed()[0]:
                    self.dynamic_elevation = 0
                    self.pressed = True
                else:
                    self.dynamic_elevation = self.elevation
                    if self.pressed == True:
                        self.pressed = False
    
                        # Ejecutar el código cuando se hace clic en el botón
                        self.num2 = int(self.rand)-1
                        self.rand =  (self.num1+self.num2)//2
                        text_screen(str(self.rand),"#DEA33E",font2,795,185)
                        pygame.display.update()
    
            else:
                self.top_color = "#475F77"
    

    He agregado las variables num1, num2 y rand como atributos a la clase Button2 para que puedan ser accedidas fuera de la clase. Además, he modificado el método check_click para ejecutar el código especificado cuando se hace clic en el botón.

    Para inicializar la clase Button2, puedes pasar las variables num1, num2 y rand como argumentos de esta manera:

    num1 = 1
    num2 = 100
    rand = int((num1+num2)/2)
    
    button = Button2("Haz clic aquí", 100, 40, (350, 250), 10, num1, num2)
    button.rand = rand
    

    En este ejemplo, he inicializado la variable rand a su valor inicial (el promedio de num1 y num2) y lo he asignado al atributo rand de la instancia Button2. Ahora, cuando se hace clic en el botón, las variables num2 y rand se actualizarán, y podrás acceder a sus valores actualizados fuera de la clase.

Comments are closed.