""" ~~~~~~ GUI.py ~~~~~~ By - JATIN KUMAR MANDAV A small library for Button widget for the game This is completely coded using PYGAME library of PYTHON 2.7 Lines - 136 """ # Imports import pygame import sys # Initialize Pygame pygame.init() width = 0 height = 0 display = None # Initialize display, width, margin, and height of pygame window def initGUI(screen, size): global display, width, height display = screen width = size[0] height = size[1] # Button Class class Button: def __init__(self, x, y, w, h, color, activeColor, action=None, border=None, borderWidth = 2): self.x = x self.y = y self.w = w self.h = h self.color = color self.activeColor = activeColor self.arg = 0 self.borderWidth = borderWidth self.action = action if border: self.border = border else: self.border = color self.image = None self.imagePos = None self.text = None self.textPos = None self.align = "center" self.font = "Times New Roman" self.fontSize = 11 self.fontColor = (0, 0, 0) self.image = None self.imagePos = None def select(self): if isActive(self.x, self.y, self.w, self.h) and self.action != None: self.action(self.arg) def draw(self, index=0): if index == self.arg: color = self.activeColor else: color = self.color pygame.draw.rect(display, color, (self.x, self.y, self.w, self.h)) pygame.draw.rect(display, self.border, (self.x, self.y, self.w, self.h), self.borderWidth) if (self.text): display.blit(self.text, self.textPos) if not (self.image == None): display.blit(self.image, self.imagePos) def addImage(self, image, pos): size = image.get_size() self.image = image self.imagePos = (self.x + pos[0] - size[0]/2, self.y + pos[1] - size[1]/2) def addText(self, text, pos, size=25, font="Times New Roman", color=(0, 0 ,0), align="center"): self.font = font self.fontSize = size self.fontColor = color self.align = align font = pygame.font.SysFont(font, size) self.text = font.render(text, True, color) self.textPos = getRect(self.text) if align == "center": self.textPos.center = (self.x + self.w/2 + pos[0], self.y + self.h/2 + pos[1]) else: self.textPos = (self.x + 10 + pos[0], self.y + pos[1]) def updateText(self, text, pos): font = pygame.font.SysFont(self.font, self.fontSize) self.text = font.render(text, True, self.fontColor) self.textPos = getRect(self.text) if self.align == "center": self.textPos.center = (self.x + self.w/2 + pos[0], self.y + self.h/2 + pos[1]) else: self.textPos = (self.x + 10 + pos[0], self.y + pos[1]) def getRect(font): return font.get_rect() # Check if mouse is over the button def isActive(x, y, w, h): pos = pygame.mouse.get_pos() if (x < pos[0] < x + w) and (y < pos[1] < y + h): return True return False if __name__ == "__main__": screen = pygame.display.set_mode((200, 100)) initGUI(screen, (200, 100)) newButton = Button(50, 25, 100, 50, (255, 255, 255)) newButton.addText("Text", (0, 0)) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() display.fill(0) newButton.draw() pygame.display.update()