Китайские шрифты Unicode в PyGame

Как я могу отображать китайские иероглифы в PyGame? И какой хороший бесплатный шрифт использовать для этой цели?


person Community    schedule 20.03.2009    source источник


Ответы (3)


pygame использует SDL_ttf для рендеринга, поэтому вы должны быть в хорошей форме, когда рендеринг идет.

На сайте unifont.org имеются обширные ресурсы по шрифтам с открытым исходным кодом для ряда шрифтов.

Я взял пан-юникодный шрифт Cyberbit и извлек прилагаемый файл ttf. На моей машине работало следующее: Windows Vista Home Basic и Python 2.6:

# -*- coding: utf-8 -*-

import pygame, sys


unistr = u"黒澤 明"
pygame.font.init()
srf = pygame.display.set_mode((640,480))
f = pygame.font.Font("Cyberbit.ttf",20)
srf.blit(f.render(unistr,True,(0,0,0)),(0,0))
pygame.display.flip()

while True:
    srf.blit(f.render(unistr,True,(255,255,255)),(0,0))
    for e in pygame.event.get():
        if e.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

Пока вы просто отображаете текст Unicode, вы должны быть в фантастической форме. Если, однако, вы хотите на самом деле прочитать ввод юникода от пользователя, ситуация будет гораздо более мрачной. Pygame не имеет никаких методов ввода.

person Community    schedule 21.03.2009
comment
Pygame имеет элементарную поддержку событий, которая, если я не ошибаюсь, включает в себя события нажатия клавиш. Это не так просто, как вызов input(), но поверх этого должна быть возможность создавать элементы ввода пользовательского интерфейса. Также, похоже, есть поддержка вырезания и вставки через pygame.scrap. - person SwiftsNamesake; 06.01.2015
comment
@SwiftsNamesake, я не говорю, что pygame не может читать ввод; скорее, я говорю, что у него нет стандартного способа использования ОС или любых других методов ввода , сопоставления последовательностей кодов клавиш со сценарием (скажем, Unicode) для определенного языка. Это касается в первую очередь языков ввода, отличных от английского, таких как китайский или арабский. - person SingleNegationElimination; 06.01.2015
comment
Я это понимаю. Я просто хотел уточнить, что есть способы обойти эту проблему, внедрив указанные функции самостоятельно. - person SwiftsNamesake; 06.01.2015

Насколько мне известно — и я сам не пробовал — PyGame должен просто работать, когда вы передаете ему строку Unicode, содержащую китайские символы, например. u'中国'.

См. раздел «Восточная Азия» на странице http://www.unifont.org/fontguide/ для несколько подходящих шрифтов с открытой лицензией.

person bobince    schedule 21.03.2009

Вот список встроенных шрифтов в pygame, которые могут отображать китайский язык:

arialms
fzshuti
fzyaoti
lisu
malgungothic
microsoftjhengheimicrosoftjhengheiui
microsoftjhengheimicrosoftjhengheiuibold
microsoftjhengheimicrosoftjhengheiuilight
microsoftyaheimicrosoftyaheiui
microsoftyaheimicrosoftyaheiuibold
microsoftyaheimicrosoftyaheiuilight
msgothicmsuigothicmspgothic
simsunnsimsun
stcaiyun
stfangsong
sthupo
stkaiti
stliti
stsong
stxihei
stxingkai
stxinwei
stzhongsong
youyuan
yugothicmediumyugothicuiregular
yugothicregularyugothicuisemilight
yugothicyugothicuilight
yugothicyugothicuisemiboldyugothicuibold

Каждый из вышеперечисленных шрифтов работает с китайскими иероглифами. Вот пример с "stsong":

import pygame

text = "中文"
font = "stsong"

pygame.font.init()
wn = pygame.display.set_mode((500, 500))
font = pygame.font.SysFont(font, 190)
wn.blit(font.render(text, True, (255, 255, 255)), (50, 50))
pygame.display.update()

Выход:

введите здесь описание изображения

person Ann Zen    schedule 13.02.2021