Introdução à programação
com Python em um contexto visual


Um botão com orientação a objetos

Primeiro vamos ver como usar um botão, instanciando dois objetos da classe Botao.

from botao import Botao  # precisa do módulo botao.py (um outro arquivo na pasta do sketch)

estado_inicial = True

def setup():
    global b1, b2
    size(400, 400)
    b1 = Botao(100, 150, 200, 50, "clique aqui")
    b2 = Botao(100, 250, 200, 50, "de novo!")


def draw():
    if estado_inicial:
        background(200)
    else:
        background(10)

    global estado_inicial
    resultado1 = b1.display()
    resultado2 = b2.display()
    if resultado1 or resultado2:
        print('clique')
        estado_inicial = not estado_inicial


Aqui a classe utilizada no exemplo.

# para o arquivo botao.py
from py5 import *

class Botao():

    def __init__(self, x, y, w, h, t):
        self.x, self.y = x, y
        self.w, self.h = w, h
        self.t = t
        self.pressed = False

    def mouse_over(self):
        return (self.x < mouse_x < self.x + self.w and
                self.y < mouse_y < self.y + self.h)

    def display(self):
        mouse_over = self.mouse_over()
        if mouse_over:
            fill(140)
        else:
            fill(240)
        rect_mode(CORNER)
        rect(self.x, self.y, self.w, self.h, 5)
        fill(0)
        text_align(CENTER, CENTER)
        text(self.t,
             self.x + self.w / 2,
             self.y + self.h / 2)

        if mouse_over and self.pressed and not mouse_pressed:
            self.pressed = False
            return True

        if mouse_over and mouse_pressed:
            self.pressed = True
        else:
            self.pressed = False

        return False