• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pygame - jak wyświetlić wyśrodkowany tekst?

Object Storage Arubacloud
+1 głos
683 wizyt
pytanie zadane 19 lipca 2021 w Python przez Hajpa Użytkownik (880 p.)
Witam,

 

Mam program, który działa na pełnym ekranie (0, 0).

Chciałbym wyświetlić okienko z nazwą programu i krótką instrukcją obsługi, które wyświetli się po wciśnięciu F1.

Okienko o wymiarach np. 600x700. Wycentrowane względem całego ekranu a w nim w górnej części nazwa programu większą czcionką i pod spodem mniejszą skróty klawiszowe i objaśnienia.

Może ktoś oświecić?

2 odpowiedzi

+1 głos
odpowiedź 20 lipca 2021 przez VBService Ekspert (253,340 p.)
edycja 20 lipca 2021 przez VBService
0 głosów
odpowiedź 19 lipca 2021 przez niezalogowany
edycja 19 lipca 2021

https://stackoverflow.com/questions/23982907/how-to-center-text-in-pygame

https://pythonprogramming.altervista.org/how-to-center-a-text-with-pygame/?doing_wp_cron=1626699590.2662210464477539062500

przykład

# draw text
font = pygame.font.Font(None, 25)
text = font.render("You win!", True, BLACK)
text_rect = text.get_rect(center=(SCREEN_WIDTH/2, SCREEN_HEIGHT/2))
screen.blit(text, text_rect)

 

komentarz 21 lipca 2021 przez Hajpa Użytkownik (880 p.)
Dzięki za przykładowy kod. Zawsze to łatwiej.

W internecie znalazłem kod, który po małej modyfikacji wyświetla 2 kwadraty, gdzie drugi jest w środku 1go. W jaki sposób wpisać wyraz w ten mały kwadrat?

Dzięki.

 

import pygame   
pygame.init()  
window = pygame.display.set_mode((0, 0))
x = 200
y = 200
width = 100
height = 50
vel = 5

run = True
while run:
    pygame.time.delay(10)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and x>0:
        x -= vel
    if keys[pygame.K_RIGHT] and x<600-width:
        x += vel
    if keys[pygame.K_UP] and y>0:
        y -= vel
    if keys[pygame.K_DOWN] and y<600-height:
        y += vel
    window.fill((255, 255, 255))
    rect1 = pygame.Rect(x, y, 250, 250)
    rect2 = pygame.Rect(0, 0, 120, 74)
    rect2.center = rect1.center
    pygame.draw.rect(window, (0, 0, 0), rect1)
    pygame.draw.rect(window, (255, 255, 255), rect2)
#    pygame.draw.rect(window, (255, 250, 250), (x, y, width, height))
    pygame.display.update()  
pygame.quit()
komentarz 21 lipca 2021 przez VBService Ekspert (253,340 p.)
edycja 21 lipca 2021 przez VBService

Dodałem też zamykanie aplki przez naciśnięcie klawisza ESC-p.  wink


import pygame

pygame.init()  
window = pygame.display.set_mode((0, 0))

(screen_width, screen_height) = pygame.display.get_surface().get_size()

font_size = 40
font = pygame.font.SysFont("arial", font_size)

(rect1_width, rect1_height) = (250, 250)
rect1_color = (0, 0, 0)
(rect1_x, rect1_y, rect1_step) = (200, 200, 5)

(rect2_width, rect2_height) = (120, 74)
(rect2_x, rect2_y) = (0, 0)
(rect2_color, rect2_text_color) = ((255, 255, 255), (0, 255, 0))
rect2_text_render = font.render("wyraz", True, rect2_text_color)


run = True
while run:
    pygame.time.delay(10)
    keys = pygame.key.get_pressed()
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT or keys[pygame.K_ESCAPE]:
            run = False
            
    if keys[pygame.K_LEFT] and rect1_x > 0:
        rect1_x -= rect1_step
    if keys[pygame.K_RIGHT] and rect1_x < (screen_width - rect1_width):
        rect1_x += rect1_step
    if keys[pygame.K_UP] and rect1_y > 0:
        rect1_y -= rect1_step
    if keys[pygame.K_DOWN] and rect1_y < (screen_height - rect1_height):
        rect1_y += rect1_step

    window.fill((255, 255, 255))

    rect1 = pygame.Rect(rect1_x, rect1_y, rect1_width, rect1_height)
    rect2 = pygame.Rect(rect2_x, rect2_y, rect2_width, rect2_height)
    rect2.center = rect1.center
    
    pygame.draw.rect(window, rect1_color, rect1)
    rect2_draw = pygame.draw.rect(window, rect2_color, rect2)
    
    # tekst rect2_text_render wycentrowany w rect2
    window.blit(rect2_text_render, rect2_text_render.get_rect(center = rect2_draw.center))
      
    #pygame.draw.rect(window, (255, 250, 250), (x, y, width, height))
    
    pygame.display.update()
    
    
pygame.quit()

 

 

How to add text into a pygame rectangle ]

 

P.S postaraj się wrzucać kod prawidłowo  smiley  

 Jak wstawić do pytania kod źródłowy?

komentarz 26 lipca 2021 przez Hajpa Użytkownik (880 p.)

Dzięki, chyba załapałem, ale teraz mam pytanko o położenie w rect. W moim przykładzie wyświetlam 6 punktów w czerwonym rect i punkt 2 i 5 nie chcą przytulić się do lewej i prawej. Obszedłem to w punkcie 5, ale gdybym miał tylko jeden punkt i chciałbym go przykleić do lewej na środku, to jak to zrobić?

import pygame as pg
pg.init()
screen = pg.display.set_mode((1000, 500))
clock = pg.time.Clock()
white=(255,255,255)
red=(255,0,0)
black=(0)
radius= 25
xs, ys =screen.get_size()
fullrect = pg.Rect(0, 0, xs, ys)
kafelekrect = pg.Rect(0, 0, 200, 300)
p1rect = pg.Rect(0, 0, 100, 100)
p2rect = pg.Rect(0, 0, 100, 100)
p3rect = pg.Rect(0, 0, 100, 100)
p4rect = pg.Rect(0, 0, 100, 100)
p5rect = pg.Rect(0, 0, 100, 100)
p6rect = pg.Rect(0, 0, 100, 100)
# położenie
kafelekrect.center = fullrect.center
p1rect.topleft = kafelekrect.topleft
p2rect.left = kafelekrect.left
#p2rect.topleft = p1rect.bottomleft
p3rect.bottomleft = kafelekrect.bottomleft
p4rect.topright = kafelekrect.topright
p5rect.topright = p4rect.bottomright
p6rect.bottomright = kafelekrect.bottomright

print ("kafel ", kafelekrect)
print (p1rect)
print (p2rect)
print (p3rect)
print ("p4 ", p4rect)
print (p5rect)
print (p6rect)






done = False
while not done:
    for event in pg.event.get():
        if event.type == pg.QUIT:
            done = True

    screen.fill(black)
#kafelek
    pg.draw.rect(screen, red, kafelekrect)
# punkty
    pg.draw.circle(screen, white, p1rect.center, radius)
    pg.draw.circle(screen, white, p2rect.center, radius)
    pg.draw.circle(screen, white, p3rect.center, radius)
    pg.draw.circle(screen, white, p4rect.center, radius)
    pg.draw.circle(screen, white, p5rect.center, radius)
    pg.draw.circle(screen, white, p6rect.center, radius)
    pg.display.flip()
    clock.tick(60)

 

komentarz 27 lipca 2021 przez VBService Ekspert (253,340 p.)
edycja 27 lipca 2021 przez VBService

Pobierz z parent (czerwony rect)

The Rect object has several virtual attributes which can be used to move and align the Rect:

 

x,y
top, left, bottom, right
topleft, bottomleft, topright, bottomright
midtop, midleft, midbottom, midright
center, centerx, centery
size, width, height
w,h

i przypisz np. do rect.center dla "kropek" ( pg.draw.circle(..., p1rect, ...) )

# położenie p1rect, p2rect, ... itd (kropek) we wnątrz kafelekrect
p1rect.center = kafelekrect.topleft
p2rect.center = kafelekrect.topright
p3rect.center = kafelekrect.midleft
p4rect.center = kafelekrect.midright
p5rect.center = kafelekrect.bottomleft
p6rect.center = kafelekrect.bottomright

wtedy uzyskasz

import pygame as pg

pg.init()
screen = pg.display.set_mode((1000, 500))

clock = pg.time.Clock()

white = (255, 255, 255)
red = (255, 0, 0)
black = (0, 0, 0)

radius = 25
xs, ys = screen.get_size()

fullrect = pg.Rect(0, 0, xs, ys)
kafelekrect = pg.Rect(0, 0, 200, 300)
kafelekrect.center = fullrect.center

p1rect = pg.Rect(0, 0, 100, 100)
p2rect = pg.Rect(0, 0, 100, 100)
p3rect = pg.Rect(0, 0, 100, 100)
p4rect = pg.Rect(0, 0, 100, 100)
p5rect = pg.Rect(0, 0, 100, 100)
p6rect = pg.Rect(0, 0, 100, 100)

# położenie p1rect, p2rect, ... itd (kropek) we wnątrz kafelekrect
p1rect.center = kafelekrect.topleft
p2rect.center = kafelekrect.topright
p3rect.center = kafelekrect.midleft
p4rect.center = kafelekrect.midright
p5rect.center = kafelekrect.bottomleft
p6rect.center = kafelekrect.bottomright
 
print ("kafel ", kafelekrect)
print ("p1", p1rect)
print ("p2", p2rect)
print ("p3", p3rect)
print ("p4", p4rect)
print ("p5", p5rect)
print ("p6", p6rect)  
 
 
done = False
while not done:
    keys = pg.key.get_pressed()
     
    for event in pg.event.get():
        if event.type == pg.QUIT or keys[pg.K_ESCAPE]:
            done = True
 
    screen.fill(black)
    
    # kafelek
    pg.draw.rect(screen, red, kafelekrect)
    
    # punkty
    pg.draw.circle(screen, white, p1rect.center, radius)
    pg.draw.circle(screen, white, p2rect.center, radius)
    pg.draw.circle(screen, white, p3rect.center, radius)
    pg.draw.circle(screen, white, p4rect.center, radius)
    pg.draw.circle(screen, white, p5rect.center, radius)
    pg.draw.circle(screen, white, p6rect.center, radius)
    
    pg.display.flip()
    clock.tick(60)

pg.quit()

 

a np. przypisując ten sam wirtualny atrybut (1:1)

# położenie p1rect, p2rect, ... itd (kropek) we wnątrz kafelekrect
p1rect.topleft = kafelekrect.topleft
p2rect.topright = kafelekrect.topright
p3rect.midleft = kafelekrect.midleft
p4rect.midright = kafelekrect.midright
p5rect.bottomleft = kafelekrect.bottomleft
p6rect.bottomright = kafelekrect.bottomright

uzyskasz  wink

import pygame as pg

pg.init()
screen = pg.display.set_mode((1000, 500))

clock = pg.time.Clock()

white = (255, 255, 255)
red = (255, 0, 0)
black = (0, 0, 0)

radius = 25
xs, ys = screen.get_size()

fullrect = pg.Rect(0, 0, xs, ys)
kafelekrect = pg.Rect(0, 0, 200, 300)
kafelekrect.center = fullrect.center

p1rect = pg.Rect(0, 0, 100, 100)
p2rect = pg.Rect(0, 0, 100, 100)
p3rect = pg.Rect(0, 0, 100, 100)
p4rect = pg.Rect(0, 0, 100, 100)
p5rect = pg.Rect(0, 0, 100, 100)
p6rect = pg.Rect(0, 0, 100, 100)

# położenie p1rect, p2rect, ... itd (kropek) we wnątrz kafelekrect
p1rect.topleft = kafelekrect.topleft
p2rect.topright = kafelekrect.topright
p3rect.midleft = kafelekrect.midleft
p4rect.midright = kafelekrect.midright
p5rect.bottomleft = kafelekrect.bottomleft
p6rect.bottomright = kafelekrect.bottomright
 
print ("kafel ", kafelekrect)
print ("p1", p1rect)
print ("p2", p2rect)
print ("p3", p3rect)
print ("p4", p4rect)
print ("p5", p5rect)
print ("p6", p6rect)  
 
 
done = False
while not done:
    keys = pg.key.get_pressed()
     
    for event in pg.event.get():
        if event.type == pg.QUIT or keys[pg.K_ESCAPE]:
            done = True
 
    screen.fill(black)
    
    # kafelek
    pg.draw.rect(screen, red, kafelekrect)
    
    # punkty
    pg.draw.circle(screen, white, p1rect.center, radius)
    pg.draw.circle(screen, white, p2rect.center, radius)
    pg.draw.circle(screen, white, p3rect.center, radius)
    pg.draw.circle(screen, white, p4rect.center, radius)
    pg.draw.circle(screen, white, p5rect.center, radius)
    pg.draw.circle(screen, white, p6rect.center, radius)
    
    pg.display.flip()
    clock.tick(60)

pg.quit()

 

dzieje się tak, że te "kropki" są pozycjonowane w rect (zielone, niebieskie na obrazku poniżej), które pozycjonowane są względem parent (czerwony rect)  wink

p1rect = pg.Rect(0, 0, 100, 100)
p2rect = pg.Rect(0, 0, 100, 100)
p3rect = pg.Rect(0, 0, 100, 100)
p4rect = pg.Rect(0, 0, 100, 100)
p5rect = pg.Rect(0, 0, 100, 100)
p6rect = pg.Rect(0, 0, 100, 100)
    # rysowanie rect dla demonstracji
    pg.draw.rect(screen, green, p1rect)
    pg.draw.rect(screen, blue, p2rect)
    pg.draw.rect(screen, blue, p3rect)
    pg.draw.rect(screen, green, p4rect)
    pg.draw.rect(screen, green, p5rect)
    pg.draw.rect(screen, blue, p6rect)

 

import pygame as pg

pg.init()
screen = pg.display.set_mode((1000, 500))

clock = pg.time.Clock()

white = (255, 255, 255)
red = (255, 0, 0)
green = (0, 255, 0)
blue = (0, 0, 255)
black = (0, 0, 0)

radius = 25
xs, ys = screen.get_size()

fullrect = pg.Rect(0, 0, xs, ys)
kafelekrect = pg.Rect(0, 0, 200, 300)
kafelekrect.center = fullrect.center

p1rect = pg.Rect(0, 0, 100, 100)
p2rect = pg.Rect(0, 0, 100, 100)
p3rect = pg.Rect(0, 0, 100, 100)
p4rect = pg.Rect(0, 0, 100, 100)
p5rect = pg.Rect(0, 0, 100, 100)
p6rect = pg.Rect(0, 0, 100, 100)

# położenie p1rect, p2rect, ... itd (kropek) we wnątrz kafelekrect
p1rect.topleft = kafelekrect.topleft
p2rect.topright = kafelekrect.topright
p3rect.midleft = kafelekrect.midleft
p4rect.midright = kafelekrect.midright
p5rect.bottomleft = kafelekrect.bottomleft
p6rect.bottomright = kafelekrect.bottomright
 
print ("kafel ", kafelekrect)
print ("p1", p1rect)
print ("p2", p2rect)
print ("p3", p3rect)
print ("p4", p4rect)
print ("p5", p5rect)
print ("p6", p6rect)  
 
 
done = False
while not done:
    keys = pg.key.get_pressed()
     
    for event in pg.event.get():
        if event.type == pg.QUIT or keys[pg.K_ESCAPE]:
            done = True
 
    screen.fill(black)
    
    # kafelek
    pg.draw.rect(screen, red, kafelekrect)

    # rysowanie rect dla demonstracji
    pg.draw.rect(screen, green, p1rect)
    pg.draw.rect(screen, blue, p2rect)
    pg.draw.rect(screen, blue, p3rect)
    pg.draw.rect(screen, green, p4rect)
    pg.draw.rect(screen, green, p5rect)
    pg.draw.rect(screen, blue, p6rect)    
    
    # punkty "kropki"
    pg.draw.circle(screen, white, p1rect.center, radius)
    pg.draw.circle(screen, white, p2rect.center, radius)
    pg.draw.circle(screen, white, p3rect.center, radius)
    pg.draw.circle(screen, white, p4rect.center, radius)
    pg.draw.circle(screen, white, p5rect.center, radius)
    pg.draw.circle(screen, white, p6rect.center, radius)
    
    pg.display.flip()
    clock.tick(60)

pg.quit()

1
komentarz 27 lipca 2021 przez Hajpa Użytkownik (880 p.)
Dzięki! Przegapiłem te "mid". Teraz wszystko jasne.

Jeszcze raz dzięki!

Podobne pytania

0 głosów
0 odpowiedzi 135 wizyt
+1 głos
0 odpowiedzi 137 wizyt
pytanie zadane 22 czerwca 2022 w Python przez Karp.exe Początkujący (340 p.)
0 głosów
2 odpowiedzi 470 wizyt
pytanie zadane 10 czerwca 2022 w Python przez Hajpa Użytkownik (880 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...