• 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?

Fiszki IT
Fiszki IT
+1 głos
126 wizyt
pytanie zadane 19 lipca w Python przez Hajpa Początkujący (320 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 przez VBService VIP (122,360 p.)
edycja 20 lipca przez VBService
0 głosów
odpowiedź 19 lipca przez niezalogowany
edycja 19 lipca

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 przez Hajpa Początkujący (320 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 przez VBService VIP (122,360 p.)
edycja 21 lipca 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 przez Hajpa Początkujący (320 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 przez VBService VIP (122,360 p.)
edycja 27 lipca 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 przez Hajpa Początkujący (320 p.)
Dzięki! Przegapiłem te "mid". Teraz wszystko jasne.

Jeszcze raz dzięki!

Podobne pytania

0 głosów
1 odpowiedź 62 wizyt
pytanie zadane 6 czerwca w Python przez cba Użytkownik (550 p.)
0 głosów
1 odpowiedź 54 wizyt
pytanie zadane 30 marca w Python przez kacper1445 Gaduła (4,370 p.)
Porady nie od parady
Komentarze do pytań nie służą do odpowiadania, od tego jest wydzielona sekcja odpowiedzi. Funkcją komentarzy jest natomiast możliwość uzyskania dodatkowych informacji na temat samego posta.Komentarze

84,794 zapytań

133,600 odpowiedzi

296,073 komentarzy

56,043 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...