如何清除显示屏上的所有文本

时间:2018-02-21 04:38:56

标签: python text pygame display

我是第一次询问堆栈溢出!我是一个住在香港的12岁男孩,所以如果我的英文错了,请告诉我,请不要记住。除此之外,我是Python的新手。我不知道代码的含义。每个人都可以#告诉我意义吗?谢谢!!

我正在做一个使用Python的项目。另外,对于显示器,我也使用Pygame。但是显示器存在一些问题。 这是我的测试代码:

# install pygame
import pygame
from pygame import *
pygame.init()

# play music
mixer.init()
mixer.music.load("game_music.mp3")
mixer.music.play()

# colour
red = (255, 0, 0)
green = (0, 255, 0)
blue = (0, 0, 255)
grass_green = (112, 173, 71)
white = (255, 255, 255)
black = (0, 0, 0)

# screen settings
window = pygame.display.set_mode((640, 600))
window.fill(grass_green)
pygame.display.set_caption("What's Your Number?")

# fonts settings
default_font = pygame.font.get_default_font()
font_a = pygame.font.Font(default_font, 57)
font_b = pygame.font.Font(default_font, 30)
font_c = pygame.font.Font(default_font, 18)

# text
title = font_a.render("What's Your Number?", 1, white)
enter_to_start = font_b.render("Press the Enter to start", 1, white)
random_mode = font_a.render("Random Mode", 1, black)
your_mode = font_a.render("Your Mode", 1, black)
des_random_1 = font_c.render("The PC choose a random number for you to", 1, black)
des_random_2 = font_c.render("guess! Can you guess it correct?", 1, black)
des_your = font_c.render("Pick a number and let you friends to guess!", 1, black)
random_control = font_b.render("Press the up arrow", 1, black)
your_control = font_b.render("Press the down arrow", 1, black)

# image
up_arrow = pygame.image.load("up_arrow_new.png")
down_arrow = pygame.image.load("down_arrow_new.png")


def blit_img(img, x, y):
    window.blit(img, (x, y))


# game
game = False
temp = True
while not game:
    if temp:
        window.blit(title, (10, 150))
        window.blit(enter_to_start, (160, 350))
        pygame.display.flip()
        for event in pygame.event.get():
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_KP_ENTER:
                    temp = False
                    window.fill(grass_green)
                    pygame.draw.rect(window, red, [50, 50, 540, 225])
                    pygame.draw.rect(window, blue, [50, 325, 540, 225])
                    window.blit(random_mode, (55, 65))
                    window.blit(des_random_1, (55, 150))
                    window.blit(des_random_2, (55, 200))
                    window.blit(random_control, (55, 240))
                    blit_img(up_arrow, 450, 150)
                    window.blit(your_mode, (55, 335))
                    window.blit(des_your, (55, 425))
                    window.blit(your_control, (55, 515))
                    blit_img(down_arrow, 450, 425)
                    pygame.display.flip()
                    if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
                        if temp == False:
                            temp = True
                            window.fill(grass_green)
                            pygame.display.flip()
                if event.key == pygame.K_ESCAPE:
                    game = True
            if event.type == pygame.QUIT:
                game = True

我想让它像书或PowerPoint一样有页面。在此代码中,我的问题是显示的文本无法删除并blit上面的新文本。有人能帮我吗?非常感谢!!

2 个答案:

答案 0 :(得分:1)

我会每帧填充窗口,然后渲染并blit当前文本。文本可以存储在列表中,并且可以使用在事件循环中递增的索引变量来访问当前文本。

import pygame


pygame.init()

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

window = pygame.display.set_mode((640, 600))
clock = pygame.time.Clock()  # A clock to limit the frame rate.
font = pygame.font.Font(None, 57)  # Use the default font.
texts = ['Hello', "what's", 'up?']
text_index = 0

done = False
while not done:
    # Handle events.
    for event in pygame.event.get():
        # Allow the user to quit by clicking on the 'X' button.
        if event.type == pygame.QUIT:
            done = True
        elif event.type == pygame.KEYDOWN:
            if event.key in (pygame.K_KP_ENTER, pygame.K_RETURN):
                # Make sure that we don't get an IndexError.
                if text_index < len(texts)-1:
                    # Increment the index.
                    text_index += 1

    # Insert additional game logic here.

    # Finally draw everything.
    window.fill(white)  # Use fill to clear the window.
    what_I_say = font.render(texts[text_index], True, black)
    window.blit(what_I_say, (10, 150))

    pygame.display.flip()
    clock.tick(30)  # Limit the frame rate to 30 FPS.

如果您真的只需要在用户想要切换到下一页(发生事件)时更新窗口,您也可以使用pygame.event.wait代替pygame.event.get

答案 1 :(得分:0)

在pygame中删除以前的东西的方法是绘制背景和你想要保留的一切。在这种情况下,你想删除Hello,所以你必须阻止pygame绘制它,然后在它上面绘制背景

它应该是这样的:

import pygame
pygame.init()

#colour settings
white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)
green = (0, 255, 0)
blue = (0, 0, 255)

#making a screen(display)
window = pygame.display.set_mode((640, 600))
window.fill(green)

# fonts settings
default_font = pygame.font.get_default_font()
font = pygame.font.Font(default_font, 57)
temp = True

#the things I want to display
while True:
    if temp:
        what_I_say = font.render("Hello", 1, white)
        window.blit(what_I_say, (10, 150))
    pygame.display.flip()
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RETURN:
                temp = False
                window.fill(green)
                pygame.draw.rect(window, red, [50, 50, 540, 500])

布尔值temp标记是否绘制Hello。按下返回(我的键盘没有键盘输入),temp设置为false(因此它将停止绘制Hello),窗口重新填充绿色(覆盖上一个hello),然后绘制一个红色矩形。