I have a “Credits” menu in my pygame and I’d like to make some buttons that go to certain websites.
What I mean is, when the button is clicked, it should open up, for example, GitHub (or whatever the link is).
Is there a way I can achieve this?
Advertisement
Answer
Implement a Button
class ans use the webbrowser module to open an URL
JavaScript
x
2
1
import webbrowser
2
JavaScript
1
4
1
if event.type == pygame.MOUSEBUTTONDOWN:
2
if self.rect.collidepoint(event.pos) and event.button == 1:
3
webbrowser.open(self.url)
4
See also Pygame mouse clicking detection and How can I open a website in my web browser using Python?
Minimal example:
JavaScript
1
52
52
1
import pygame
2
import webbrowser
3
4
class Button(pygame.sprite.Sprite):
5
def __init__(self, x, y, w, h, font, text, action):
6
super().__init__()
7
text_surf = font.render(text, True, (0, 0, 0))
8
self.button_image = pygame.Surface((w, h))
9
self.button_image.fill((96, 96, 96))
10
self.button_image.blit(text_surf, text_surf.get_rect(center = (w // 2, h // 2)))
11
self.hover_image = pygame.Surface((w, h))
12
self.hover_image.fill((96, 96, 96))
13
self.hover_image.blit(text_surf, text_surf.get_rect(center = (w // 2, h // 2)))
14
pygame.draw.rect(self.hover_image, (96, 196, 96), self.hover_image.get_rect(), 3)
15
self.image = self.button_image
16
self.rect = pygame.Rect(x, y, w, h)
17
self.action = action
18
19
def update(self, event_list):
20
hover = self.rect.collidepoint(pygame.mouse.get_pos())
21
for event in event_list:
22
if event.type == pygame.MOUSEBUTTONDOWN:
23
if hover and event.button == 1:
24
self.action()
25
self.image = self.hover_image if hover else self.button_image
26
27
pygame.init()
28
window = pygame.display.set_mode((500, 300))
29
clock = pygame.time.Clock()
30
font50 = pygame.font.SysFont(None, 50)
31
32
button1 = Button(50, 40, 200, 60, font50, "Pygame",
33
lambda : webbrowser.open('https://www.pygame.org/news'))
34
group = pygame.sprite.Group(button1)
35
36
run = True
37
while run:
38
clock.tick(60)
39
event_list = pygame.event.get()
40
for event in event_list:
41
if event.type == pygame.QUIT:
42
run = False
43
44
group.update(event_list)
45
46
window.fill(0)
47
group.draw(window)
48
pygame.display.flip()
49
50
pygame.quit()
51
exit()
52