【发布时间】:2021-08-03 11:21:14
【问题描述】:
我正在尝试在 pygame 中制作 2d 密码生成器,我必须询问用户并从用户那里获取有关他希望密码长度为多少长度的文本输入。 我知道文本输入会很短,但是如果用户键入一个大字符串,文本输入会通过我的屏幕宽度,所以我的问题是如何检测字体是否通过了我的屏幕宽度,所以从现在开始,无论用户输入如何显示在新行上,因为如果文本不在换行中,我的用户将无法看到他现在输入的内容。
这是我的文本输入功能:
def text_input(x, y, color, char=None, char_x=None, char_y=None, char_color=None, fill=(0, 0, 0), thing=None,
thing_x=None, thing_y=None):
"""
:param x: Defines the x axis or the width position where the text input should be drawn.
:param y: Defines the y axis or the height position where the text input should be drawn.
:param color: Defines the color of the text input.
:param char: If the parameter char in not entered it does not do anything otherwise it display's the the parameter
char's text on the screen
:param char_x: If the parameter char is entered char_x Defines the x axis or the width position where the text
should be drawn.
:param char_y: If the parameter char is entered char_y Defines the y axis or the height position where the text
should be drawn.
:param char_color: Defines the color of the text of the parameter char in rgb color pixels.
:param fill: If the parameter fill is entered it fills the display with the tuple of the rgb color pixels which the
user entered. But if the parameter fill is not entered it fills the display with the rgb color code
black.
:param thing: If the user wants some thing to been drawn on the display the fill the parameter thing with the object
they want to draw. But if the parameter thing is not entered. The thing parameter should be a pygame
Surface.
:param thing_x: If the parameter thing is entered thing_x Defines the x axis or the width position where the
parameter thing should be drawn
:param thing_y: If the parameter thing is entered thing_y Defines the y axis or the height position where the
parameter thing should be drawn.
:return: It Display's the text input and the other parameters which were entered on the window and the updates it.
"""
characters = ""
WINDOW.fill(fill)
if thing is not None:
draw(thing, thing_x, thing_y)
if char is not None:
char_text = str(char)
char_text_surface = FONT.render(char_text, True, char_color)
draw(char_text_surface, char_x, char_y, True)
pygame.display.update()
while True:
for detect in pygame.event.get():
if detect.type == QUIT:
exit()
elif detect.type == KEYDOWN:
if detect.key == K_BACKSPACE:
characters = characters[:-1]
elif detect.key == K_RETURN:
global text
text = characters
return text
else:
characters = characters + detect.unicode
WINDOW.fill(fill)
if thing is not None:
draw(thing, thing_x, thing_y)
if char is not None:
char_text = str(char)
char_text_surface = FONT.render(char_text, True, char_color)
draw(char_text_surface, char_x, char_y, True)
text = FONT.render(f"{characters}", True, color)
print(char_x)
draw(text, x, y, True)
如果你想知道这里的绘图函数是什么,它的代码:
def draw(thing, x, y, update=None):
"""
:param thing: The object what needs to be drawn on the screen
:param x: Defines the x axis or the width position where the object should be drawn.
:param y: Defines the y axis or the height position where the object should be drawn.
:param update: If the parameter update is not passed we don't update the display.
But if the parameter update is passed as True we update the display.
:return: It returns the object on the display at its specific place or it returns
the object on the display at its specific place and updates and updates the display based on the parameter
update.
"""
if update is True:
WINDOW.blit(thing, (x, y))
return pygame.display.update()
else:
return WINDOW.blit(thing, (x, y)
如果你想知道我的完整代码就问我,我会编辑这篇文章:
【问题讨论】:
标签: python input text pygame coordinates