【问题标题】:How to let pygame text input detect the key in Pygame? [duplicate]如何让pygame文本输入检测到Pygame中的key? [复制]
【发布时间】:2018-08-01 03:40:25
【问题描述】:

我正在做一个使用 Python 和 Pygame 的项目。我想问一些关于 Pygame 中密钥的问题。

谢谢 Shubhitgarg。我使用他/她的建议(使用 pygame_textinput),它成功了。现在我想通过按下回车来更改文本输入位置,但它无法检测到回车。我该如何解决?我的真实代码:

# installing package
import pygame
from pygame import *
import pygame_textinput
pygame.init()

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

# screen settings
window = pygame.display.set_mode((680, 600))
window.fill(grass_green)
pygame.display.flip()

# font settings
default_font = pygame.font.get_default_font()
big_font = pygame.font.Font(default_font, 96)
font_a = pygame.font.Font(default_font, 50)
font_b = pygame.font.Font(default_font, 30)
font_c = pygame.font.Font(default_font, 18)

# text input settings
textinput = pygame_textinput.TextInput("freeansbold.ttf", 96, True, black, white, 400, 35)

# timer
start = pygame.time.get_ticks()

# text
please_guess_a_number = font_a.render("Please guess a number. ", 1, white)
text_range = font_c.render("from                                                        to", 1, white)
wrong_bigger = font_b.render("Sorry, You haven’t guess it rightly. Please try again.(The answer must be bigger.)", 1, white)
wrong_smaller = font_b.render("Sorry, You haven’t guess it rightly. Please try again.(The answer must be smaller.)", 1, white)
correct = font_b.render("Congratulations! You guess it correctly!!", 1, white)

# game
ask_you_to_set_range_1 = True
ask_you_to_set_range_2 = False
while True:
    if ask_you_to_set_range_1:
        window.blit(please_guess_a_number, (60, 80))
        pygame.draw.rect(window, yellow, [60, 200, 230, 300])
        pygame.draw.rect(window, yellow, [390, 200, 230, 300])
        window.blit(text_range, (10, 550))
        pygame.display.flip()
        while True:
            events = pygame.event.get()
            textinput.update(events)
            window.blit(textinput.get_surface(), (110, 300))
            pygame.display.flip()
    if ask_you_to_set_range_2:
        while True:
            events = pygame.event.get()
            textinput.update(events)
            window.blit(textinput.get_surface(), (440, 300))
            pygame.display.flip()
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if ask_you_to_set_range_1 and event.key == pygame.K_KP_ENTER:
                ask_you_to_set_range_1 = False
                ask_you_to_set_range_2 = True
                if textinput.update(event):
                    num1 = textinput.get_text()
                    text1 = big_font.render(num1, 1, black)
                    window.blit(text1, (110, 300))

谁能教我解决?

【问题讨论】:

  • 实际上,this answer 更适合。使用input(或raw_input)不是一个好的解决方案,因为用户必须切换到控制台窗口才能输入内容。
  • 顺便说一句,不要只是再次转发相同的问题。您可以尝试重新打开前一个问题,也可以在再次发布之前将其删除,并且在这两种情况下更准确地描述您想要实现的目标、您遇到的问题以及它与重复问题的不同之处。
  • @skrx 哦,对不起。感谢您的建议和指导!我已经删除了重复的帖子

标签: python pygame display blit


【解决方案1】:

你看到了这个https://github.com/ShubhitGarg/pygame-text-input。 您可以导入它并使用 text_input 类并在同一页面或下一页上对其进行 blit 使用这个

textinput = pygame_textinput.TextInput()

while True:
    screen.fill((225, 225, 225))

    events = pygame.event.get()
    for event in events:
        if event.type == pygame.QUIT:
            exit()

    # Feed it with events every frame
    textinput.update(events)
    # Blit its surface onto the screen
    screen.blit(textinput.get_surface(), (10, 10))

    pygame.display.update()

【讨论】:

  • 对不起,我下载了,但是无法导入!!
  • 你把它保存在哪里了?,如果你愿意,你也可以复制这个类并将其粘贴到你的代码中
  • 你的意思是我需要将它保存在我的项目文件中(我是Pycharm用户。在C://中有一个文件可以将项目放入其中)?
  • 复制粘贴代码,也可以通过保存在 /.../python /lib 中来导入
  • 是的,在 python/lib 中创建一个文件夹,将其命名为 pygame_textinput,将 pygame_textinput.py 文件从 github 复制到其中,并在同一文件夹中创建一个名为 __init__.py 的空 python 文件。它将充当模块
猜你喜欢
  • 1970-01-01
  • 2012-12-16
  • 2013-05-20
  • 2012-11-07
  • 2018-04-29
  • 2014-01-17
  • 2021-09-07
  • 2013-07-01
  • 2021-01-10
相关资源
最近更新 更多