如何使用PyGame在屏幕上呈现文本?

时间:2017-07-01 12:21:18

标签: python python-3.x

我刚刚编写了一些在命令行中运行的代码,所以现在我想给它一些图形。现在,这是我的第一个编程项目,因此在试图解释问题时请耐心等待:

我正在使用PyGame并按如下方式初始化窗口:

import pygame, pygame.midi,pygame.font, random

(width, height) = (600, 400)
background = (220,220,220)

pygame.midi.init()
pygame.font.init()

screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("Chord trainer")
screen.fill(background)

pygame.display.flip()

然后我尝试渲染文本(没有任何错误):

myfont = pygame.font.SysFont("Arial", 80)
letter = myfont.render("SOME WEIRD TEST TO TRY AND GET THINGS WORKING",0,(0,0,0))
screen.blit(letter,(100,100))

因为我想在程序关闭之前实际看到我的文本,所以我设置了一个无限循环:

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

当我运行它时,我只得到我想要的灰色屏幕,但没有任何文本,这会让我觉得我的blit命令有问题,但我无法弄清楚是什么。

最初我将渲染设置在一个循环中,但这只是让程序没有响应所以我拿出来进行调试。为了完整起见,这是循环:

while True:
    # Decide on random chord
    c1 = random.choice(chords)
    # Make sure that no repitition takes place.
    if c1==c2:
        while c1==c2:
            c1=random.choice(chords)
    c2 = c1

    myfont = pygame.font.SysFont("Arial", 80)
    letter = myfont.render(str(c1),0,(0,0,0))
    screen.blit(letter,(100,100))

    # Listen to Midi device and search for c.
    midi_listen(inp,sorted(c1))
    score += 1

1 个答案:

答案 0 :(得分:3)

您需要添加

class Program
{
    static void SetProcessAffinity(ulong groupMask)
    {
        Process.GetCurrentProcess().ProcessorAffinity = new IntPtr((long)groupMask);
    }
    static void Main(string[] args)
    {
        SetProcessAffinity(1);    // group 0
        // binary literals are a C# 7 feature for which you need VS 2017 or later.
        SetProcessAffinity(0b11); // Both groups 0 and 1 
        SetProcessAffinity(0b1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111); // for all cpu groups all 64 bits enabled
    }
}

之后

pygame.display.flip()

它会更新您的屏幕,通常您将能够看到您的文字。