gpt4 book ai didi

Python Pygame 字体 x 坐标

转载 作者:行者123 更新时间:2023-12-03 18:47:49 28 4
gpt4 key购买 nike

我正在尝试在 pygame 中制作一个二维密码生成器,我必须询问用户并从用户那里获取有关他希望密码的数字长度的文本输入。我知道文本输入会很短但是如果用户键入一个大字符串表明文本输入超过我的屏幕宽度怎么办所以我的问题是如何检测字体是否超过我的屏幕宽度所以从现在开始无论用户输入什么显示在新行中,因为如果文本不在换行符中,我的用户将无法看到他现在输入的内容。

这是我的文本输入函数:

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)

如果你想知道 draw 函数是什么,这里是它的代码:

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)

如果您想知道我的完整代码,请问我,我会编辑这篇文章:

最佳答案

使用pygame.font.Font.size确定呈现文本所需的空间量:

text_width, text_height = FONT.size(text)

字体的行距可以用get_linesize得到

使用此方法逐行呈现文本:

def render_text(font, text, color, x, y, max_length = 100, update=False):

line_y = y
si = 0
ei = 1
while ei < len(text)+1:
text_width, text_height = font.size(text[si:ei])
if text_width > max_length:
text_surf = font.render(text[si:ei-1], True, color)
WINDOW.blit(text_surf, (x, line_y))
line_y += font.get_linesize()
si = ei-1
ei += 1
if si < len(text):
text_width, text_height = font.size(text[si:])
text_surf = font.render(text[si:], True, color)
WINDOW.blit(text_surf, (x, line_y))

if update:
pygame.display.update()
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):
# [...]

while True:
for detect in pygame.event.get():
if detect.type == QUIT:
exit()

elif detect.type == KEYDOWN:
# [...]

render_text(FONT, characters, color, x, y, 100, True)

关于Python Pygame 字体 x 坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67514758/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com