I am making chess in python using pygame. The starting menu is composed of two buttons. Their border is renderd to the screen using
pygame.draw.rect(screen, (255, 255, 255), text1rect.inflate(20, 20), 10)
This is the code that I use to do this:
import pygame
from sys import exit
pygame.init()
screen = pygame.display.set_mode((800, 800))
pygame.display.set_caption("Chess")
icon = pygame.image.load("./Images/wking.png").convert_alpha()
pygame.display.set_icon(icon)
font = pygame.font.Font("Roboto-Regular.ttf", 32)
text1 = font.render("Create game", True, (0, 255, 0), (124, 124, 124))
text1_rect = text1.get_rect(center = (400, 300))
text2 = font.render("Join game", True, (0, 255, 0), (124, 124, 124))
text2_rect = text2.get_rect(center = (400, 500))
board = pygame.image.load("./Images/board.png").convert()
def main():
scene_to_render = "menu"
clock = pygame.time.Clock()
while True:
mouse_pos = pygame.mouse.get_pos()
is_clicked = pygame.mouse.get_pressed()[0]
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
if scene_to_render == "menu":
screen.fill((0, 0, 0))
screen.blit(text1, text1_rect)
screen.blit(text2, text2_rect)
pygame.draw.rect(screen, (255, 255, 255), text1_rect.inflate(20, 20), 10)
pygame.draw.rect(screen, (255, 255, 255), text2_rect.inflate(20, 20), 10)
if text1_rect.collidepoint(mouse_pos) and is_clicked:
pass
if text2_rect.collidepoint(mouse_pos) and is_clicked:
pass
# Obviously there is more code but that is not important because only the menu buttons are broken when starting from the command prompt
pygame.display.update()
clock.tick(16)
if __name__ == "__main__":
main()
The window and taskbar icon also dosen't appear when starting from the command prompt, being replaced with the standard python application icon. I understand this can be fixed when compiling to .exe with pyinstaller using a command.
The user Zack explains this in the following answer:
https://stackoverflow.com/a/10438300/18072034
With pyinstaller for example, you would call python pyinstaller.py --icon=icon.ico
This is how the menu looks when starting from vscode:
This is how the menu looks when running from cmd: