diff --git a/Pygame-Buttons/ExampleButtons.py b/Pygame-Buttons/ExampleButtons.py new file mode 100644 index 0000000000..1bb3f569ee --- /dev/null +++ b/Pygame-Buttons/ExampleButtons.py @@ -0,0 +1,135 @@ +# -*- coding: utf-8 -*- + +import pygame +import os,sys + + +class Button(object): + + def __init__(self, position, size): + + # create 3 images + self._images = [ + pygame.Surface(size), + pygame.Surface(size), + pygame.Surface(size), + ] + + # fill images with color - red, gree, blue + self._images[0].fill((255, 226, 39)) + self._images[1].fill((235, 89, 110)) + self._images[2].fill((77, 55, 93)) + + # get image size and position + self._rect = pygame.Rect(position, size) + + # select first image + self._index = 0 + + def draw(self, screen): + + # draw selected image + screen.blit(self._images[self._index], self._rect) + + def event_handler(self, event): + + # change selected color if rectange clicked + if event.type == pygame.MOUSEBUTTONDOWN: # is some button clicked + if event.button == 1: # is left button clicked + if self._rect.collidepoint(event.pos): # is mouse over button + self._index = (self._index+1) % 3 # change image + +# --- main --- + +pygame.init() +w, h = 800, 800 +screen = pygame.display.set_mode((w, h)) +GREEN = (0, 255, 0) +GRAY= (174, 150, 255) +font = pygame.font.Font('freesansbold.ttf', 22) + +# ============================================================================= +# Rendring texts23564 +# ============================================================================= + +p1 = font.render("A PNG button , Click it ", True,(233, 248, 103)) +p2= font.render("A color img buttons", True,(254, 32, 107)) +p0 = font.render('Go Back', True,(15, 28, 2)) +textRectp0 = p0.get_rect() +textRectp1 = p1.get_rect() +textRectp2 = p2.get_rect() +textRectp0.center = (405, 225) +textRectp1.center = (200, 225) +textRectp2.center=(350,420) + +#backButton=main.backButton + +module = sys.modules['__main__'] +path, name = os.path.split(module.__file__) +path = os.path.join(path, 'retry_button.png') + +img0 = pygame.image.load(path) +img0.convert() +rect0 = img0.get_rect() +rect0.x=350 +rect0.y=200 +pygame.draw.rect(img0, GREEN, rect0, 1) +act=False + + +# create buttons + +button1 = Button((205, 435), (100, 100)) +button2 = Button((310, 435), (100, 100)) +button3 = Button((420, 435), (100, 100)) + +# mainloop + + +running=True +while running: + for event in pygame.event.get(): + pos=pygame.mouse.get_pos() + if event.type == pygame.QUIT: + running = False + print("Job Done!!") + #pygame.quit() + pygame.quit() + sys.exit() + + # --- buttons events --- + + button1.event_handler(event) + button2.event_handler(event) + button3.event_handler(event) + + + if event.type==pygame.MOUSEBUTTONDOWN: + if rect0.collidepoint(event.pos): + # Toggle the active variable. + act = not act + else: + act = False + if act: + print("You Clicked PNG button") + print("Gone back") + running=False + import main + + + screen.fill(GRAY) + screen.blit(img0, rect0) + screen.blit(p0,textRectp0) + screen.blit(p1,textRectp1) + screen.blit(p2,textRectp2) + + + #---Buttons + button1.draw(screen) + button2.draw(screen) + button3.draw(screen) + pygame.display.update() + + + + diff --git a/Pygame-Buttons/README.md b/Pygame-Buttons/README.md new file mode 100644 index 0000000000..77d9162035 --- /dev/null +++ b/Pygame-Buttons/README.md @@ -0,0 +1,40 @@ +# Buttons in Python +## Aim 🎯 +- How to make buttons in python +- Why to use them +- To be able to design and animate buttons in python . +- Make buttons use in any GUI based applications . ( It will be preety handy ) +- To Redirect user to any other module using buttons . + +## Details πŸ›ˆ +| Library | README | Install | +| ------ | ------ | ------ | +| Pygame | [Pygame/PyPi](https://pypi.org/project/pygame/) | `pip install pygame` | + +## What is Included Inside ✨ + +1. Animating Button Using MOUSEOVER Porperty of pygame . +2. Adding Image Buttons. +> i. PNG images as buttons . +> ii.Simple Color images as buttons . +3. Assigning Loop Switching and Module Switching to Buttons . +4. Taking Input from USER and rendring it on a button . +5. Applying logic to leave/quit buttons . + +## How to get Started πŸ€” +- clone the repo or [copy the source code](https://github.com/Lakhankumawat/Amazing-Python-Scripts/edit/Buttons-Pygame/Pygame-Buttons/) ( be sure you maintain files in same directory ) . +- Run main.py . +- Enter your name -> click play -> welcome screen -> come back -> click close . +- You will be headed to next module -> check out all buttons . +- Looks cool !! . +- Check out line of code and then start making changes , happy coding ! . + +## How it may Look πŸ‘€ + + +| | |
| +| ------ | ------ | ------ | + + + +## Author : [LakhanKumawat](https://github.com/Lakhankumawat) diff --git a/Pygame-Buttons/main.py b/Pygame-Buttons/main.py new file mode 100644 index 0000000000..5f73263bec --- /dev/null +++ b/Pygame-Buttons/main.py @@ -0,0 +1,176 @@ +# -*- coding: utf-8 -*- + + +import pygame as pg + +pg.init() + +screen=pg.display.set_mode((500,500)) +pg.display.set_caption('Buttons Pygame') + + +class button(): + def __init__(self, color, x,y,width,height, text=''): + self.color = color + self.x = x + self.y = y + self.width = width + self.height = height + self.text = text + + def draw(self,screen,outline=None): + #Call this method to draw the button on the screen + if outline: + pg.draw.rect(screen, outline, (self.x-2,self.y-2,self.width+4,self.height+4),0) + + pg.draw.rect(screen, self.color, (self.x,self.y,self.width,self.height),0) + + if self.text != '': + font = pg.font.SysFont('comicsans', 60) + text = font.render(self.text, 1, (0,0,0)) + screen.blit(text, (self.x + (self.width/2 - text.get_width()/2), self.y + (self.height/2 - text.get_height()/2))) + + def isOver(self, pos): + #Pos is the mouse position or a tuple of (x,y) coordinates + if pos[0]> self.x and pos[0] < self.x + self.width: + if pos[1]> self.y and pos[1] < self.y + self.height: + return True + + return False + + +def redraw(): + screen.fill((164,235,243)) + greenButton.draw(screen,(0,0,0)) + redButton.draw(screen,(0,0,0)) + txt_surface1 = font.render(text1, True, color1) + + # Resize the box if the text is too long. + width = max(200, txt_surface1.get_width()+10) + input_box1.w = width + + # Blit the text. + screen.blit(txt_surface1, (input_box1.x+5, input_box1.y+10)) + + screen.blit(p1,textRectp1) + + # Blit the input_box rect. + pg.draw.rect(screen,color1, input_box1,2) + + pg.display.flip() + +def draw_enter(): + screen.fill((164,235,243)) + welcomeButton.draw(screen,(0,0,0)) + backButton.draw(screen,(0,0,0)) + +run=True +redButton=button((164,235,243),250,335,150,100,'Close') +greenButton=button((164,235,243),50,335,150,100,'Play') +welcomeButton=button((164,235,243),50,105,400,300,'Hi') + +backButton=button((164,235,243),150,435,170,50,'Go Back') +game_is_going=True +enter_screen=False + +input_box1 = pg.Rect(140, 170, 170, 50) +color_inactive = pg.Color((2, 0, 93)) +color_active = pg.Color((33, 224, 239)) +color1 = color_inactive + +active1 = False + +text1 = '' +font = pg.font.SysFont('comicsans', 60) +p1 = font.render('Enter Your Name ', True,(14, 43, 103)) + +textRectp1 = p1.get_rect() + +textRectp1.center = (245, 115) + + +while(game_is_going): + while(run): + redraw() + pg.display.update() + + for event in pg.event.get(): + pos=pg.mouse.get_pos() + + if event.type==pg.QUIT: + run=False + game_is_going=False + pg.quit() + + + if event.type == pg.KEYDOWN: + if not active1: + if event.key == pg.K_RETURN: + print(text1) + + elif event.key == pg.K_BACKSPACE: + text1 = text1[:-1] + else: + text1 += event.unicode + + + if event.type==pg.MOUSEBUTTONDOWN: + + if input_box1.collidepoint(event.pos): + # Toggle the active variable. + active1 = not active1 + else: + active1 = False + color1 = color_active if active1 else color_inactive + if greenButton.isOver(pos): + print("Clicked Enter") + run=False + enter_screen=True + elif redButton.isOver(pos): + print("Clicked Close") + run=False + game_is_going=False + pg.quit() + + if event.type ==pg.MOUSEMOTION: + if greenButton.isOver(pos): + greenButton.color=(158,222,11) + elif redButton.isOver(pos): + redButton.color=(232, 69, 69) + else: + greenButton.color=(164,235,243) + redButton.color=(164,235,243) + + + while(enter_screen): + draw_enter() + pg.display.update() + + for event in pg.event.get(): + pos=pg.mouse.get_pos() + welcomeButton.text="Hi "+str(text1) + if event.type==pg.QUIT: + enter_screen=False + game_is_going=False + pg.quit() + + + if event.type==pg.MOUSEBUTTONDOWN: + if backButton.isOver(pos): + print("Gone back") + run=True + enter_screen=False + if event.type ==pg.MOUSEMOTION: + if welcomeButton.isOver(pos): + welcomeButton.color=(158,222,11) + elif backButton.isOver(pos): + backButton.color=(232, 69, 69) + else: + welcomeButton.color=(164,235,243) + backButton.color=(164,235,243) + + +if __name__=="__main__": + import ExampleButtons + + diff --git a/Pygame-Buttons/requirements.txt b/Pygame-Buttons/requirements.txt new file mode 100644 index 0000000000..7c36c822cd --- /dev/null +++ b/Pygame-Buttons/requirements.txt @@ -0,0 +1 @@ +pygame==2.0.1 diff --git a/Pygame-Buttons/retry_button.png b/Pygame-Buttons/retry_button.png new file mode 100644 index 0000000000..e15910e598 Binary files /dev/null and b/Pygame-Buttons/retry_button.png differ

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /