Python 输入文本上的Pygame退格键未清除。而是重叠/

Python 输入文本上的Pygame退格键未清除。而是重叠/,python,pygame,Python,Pygame,为了更清楚地了解问题,请参见图片: 如图所示,我输入了一些文本。我决定退格,但我输入的新文本与前一个文本重叠。为什么会这样 pygame新手,且已被此问题困扰太久:( 请帮忙!我该怎么办 if not cheat: WIN = pygame.image.load("Assets/winBox.png") self.SCREEN.blit(WIN, (175, 230)) winRect = pygame.Rect(175, 230, 250

为了更清楚地了解问题,请参见图片:

如图所示,我输入了一些文本。我决定退格,但我输入的新文本与前一个文本重叠。为什么会这样

pygame新手,且已被此问题困扰太久:(

请帮忙!我该怎么办

   if not cheat:
        WIN = pygame.image.load("Assets/winBox.png")
        self.SCREEN.blit(WIN, (175, 230))
        winRect = pygame.Rect(175, 230, 250, 164)
        pygame.display.update(winRect)
        done = False

        while not done:
            self.CLOCK.tick(self.FPS)
            mouse = pygame.mouse.get_pos()
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    self.STATE = 0
                    done = True

                if 219 <= mouse[0] <= 269 and 366 <= mouse[1] <= 378 and pygame.mouse.get_pressed()[0] == 1:
                    # RESTART
                    self.STATE = 6
                    done = True

                elif 311 <= mouse[0] <= 375 and 366 <= mouse[1] <= 378 and pygame.mouse.get_pressed()[0] == 1:
                    # MAIN MENU
                    self.STATE = 2
                    done = True


    else:
        WIN = pygame.image.load("Assets/winBoxWithScore.png")
        self.SCREEN.blit(WIN, (175, 230))
        winRect = pygame.Rect(175, 230, 250, 164)


        pygame.display.update(winRect)
        done = False

        while not done:
            self.CLOCK.tick(self.FPS)
            mouse = pygame.mouse.get_pos()
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    self.STATE = 0
                    done = True

                if 219 <= mouse[0] <= 269 and 366 <= mouse[1] <= 378 and pygame.mouse.get_pressed()[0] == 1:
                    # RESTART
                    self.STATE = 6
                    done = True

                if 311 <= mouse[0] <= 375 and 366 <= mouse[1] <= 378 and pygame.mouse.get_pressed()[0] == 1:
                    # MAIN MENU
                    self.STATE = 2
                    done = True

                elif 290 <= mouse[0] <= 345 and 275 <= mouse[1] <= 325 and pygame.mouse.get_pressed()[0] == 1:

                    WIN = pygame.image.load("Assets/winBoxBlank.png")
                    self.SCREEN.blit(WIN, (175, 230))
                    winRect = pygame.Rect(175, 230, 250, 164)

                    pygame.display.update(winRect)
                    name = ""
                    done = False
                    while not done:
                        self.CLOCK.tick(self.FPS)
                        mouse = pygame.mouse.get_pos()

                        self.SCREEN.blit(
                            pygame.font.SysFont('comicsansms', 22).render("Enter your name :", True, Color.black),
                            (210, 250))
                        # Textbox
                        pygame.draw.rect(self.SCREEN, Color.gray, (210, 310, 180, 35), 2)

                        for event in pygame.event.get():
                            if event.type == pygame.QUIT:
                                self.STATE = 0
                                done = True

                            # Keyboard events
                            if event.type == pygame.KEYDOWN:
                                if event.key == pygame.K_BACKSPACE:
                                    name = name[:-1]  # remove last char


                                elif event.key == pygame.K_RETURN or event.key == pygame.K_KP_ENTER:
                                    done = True  # break out of the while loop to return name
                                elif event.key == pygame.K_ESCAPE:
                                    self.menu()
                                    done = True

                                else:
                                    try:
                                        name += event.unicode  # Append name
                                    except:
                                        pass
                        # Limit name to 10 characters
                        name = name[:10]
                        # Display characters typed
                        if len(name) != 0:
                            self.SCREEN.blit(pygame.font.SysFont('comicsansms', 22).render(name, True, Color.black),(230, 310))

                        pygame.display.update()

                    # Store score to the current textfile
                    p = Player(name, self.numdisks, str(len(self.moveList)))
                    with open("score.txt", "a") as sfile:
                        sfile.write("\n" + p.getName() + "\t" + str(p.getLevel()) + "\t" + str(p.getMove()))
                    # Navigate to the next page
                    self.STATE = 11
如果不作弊:
WIN=pygame.image.load(“Assets/winBox.png”)
自我筛选。blit(赢,(175230))
winRect=pygame.Rect(175230250164)
pygame.display.update(winRect)
完成=错误
虽然没有这样做:
self.CLOCK.tick(self.FPS)
mouse=pygame.mouse.get_pos()
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
self.STATE=0
完成=正确

如果代码中有219,则每次更新时都会重新绘制文本标签、文本框和名称:

self.SCREEN.blit(pygame.font.SysFont('comicsansms', 22).render("Enter your name :", True, Color.black), (210, 250))
# Textbox
pygame.draw.rect(self.SCREEN, Color.gray, (210, 310, 180, 35), 2)
但您没有清除内部的文本框。问题是您正在绘制一个未填充的矩形。绘制矩形的最后一个参数是宽度。您将其设置为2。因此它正在绘制一个未填充的矩形

如果您还添加了一个填充矩形(对于文本框内部),则每次都会清除该名称,并仅使用当前名称填充该名称

pygame.draw.rect(self.SCREEN, color_of_your_choice, (212, 312, 176, 31))

您必须调整x、y、宽度和高度,以适应外部框中稍微小一点的矩形

如果旧文本没有清除,那么我想它不会像应该的那样更新。您是否在删除字符时更新文本框?