2013-10-01 2 views
5

Я дошел до рисования прямоугольника в pygame, но мне нужно получить текст, подобный «Hello», в этот прямоугольник. Как я могу это сделать? (. Если вы можете объяснить, как хорошо, что будет высоко ценится Спасибо вам)Как добавить текст в прямоугольник pygame

Вот мой код:

import pygame 
import sys 
from pygame.locals import * 

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


class Pane(object): 
    def __init__(self): 

     pygame.init() 
     pygame.display.set_caption('Box Test') 
     self.screen = pygame.display.set_mode((600,400), 0, 32) 
     self.screen.fill((white)) 
     pygame.display.update() 

    def addRect(self): 
     self.rect = pygame.draw.rect(self.screen, (black), (175, 75, 200, 100), 2) 
     pygame.display.update() 

    def addText(self): 
     #This is where I want to get the text from 

if __name__ == '__main__': 
    Pan3 = Pane() 
    Pan3.addRect() 
    while True: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       pygame.quit(); sys.exit(); 

Спасибо за ваше время.

ответ

6

Прежде всего вам нужно создать объект Font (или SysFont). Вызов метода render по этому объекту возвращает Surface с данным текстом, который можно разбить на экране или любым другим Surface.

import pygame 
import sys 
from pygame.locals import * 

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


class Pane(object): 
    def __init__(self): 
     pygame.init() 
     self.font = pygame.font.SysFont('Arial', 25) 
     pygame.display.set_caption('Box Test') 
     self.screen = pygame.display.set_mode((600,400), 0, 32) 
     self.screen.fill((white)) 
     pygame.display.update() 


    def addRect(self): 
     self.rect = pygame.draw.rect(self.screen, (black), (175, 75, 200, 100), 2) 
     pygame.display.update() 

    def addText(self): 
     self.screen.blit(self.font.render('Hello!', True, (255,0,0)), (200, 100)) 
     pygame.display.update() 

if __name__ == '__main__': 
    Pan3 = Pane() 
    Pan3.addRect() 
    Pan3.addText() 
    while True: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       pygame.quit(); sys.exit(); 

enter image description here

Обратите внимание, что ваш код кажется немного странным, так как обычно вы делаете все рисование в главном цикле, а не заранее. Кроме того, когда вы сильно используете текст в своей программе, подумайте о кешировании результата Font.render, так как это очень медленная операция.

+0

спасибо. Вы мой спаситель. – PythonNovice

+0

Как вы можете сделать перенос текста в поле? Если у вас есть целая фраза, например .. –

+1

@ChrisNielsen Попробуйте это http://pygame.org/wiki/TextWrap – sloth