在 pygame 中键入的内容越多,如何让矩形绘图变长?
How do you get a rectangle drawing to lengthen the more you type in pygame?
在这个程序中,当用户键入更多文本时,我希望矩形在用户键入时自动变长,以将字母保留在矩形内。但是,当文本变长时,它不会更新矩形。我该如何解决这个问题?
from pygame import *
init()
screen = display.set_mode((800, 600))
name_font = font.Font(None, 32)
name_text = ''
class Rectangle:
def __init__(self, x, y):
self.x = x
self.y = y
self.input_rect = Rect(x, y, 140, 32)
self.text_surface = name_font.render(name_text, True, (255, 255, 255))
color = Color('lightskyblue3')
draw.rect(screen, color, self.input_rect, 2)
self.input_rect.w = self.text_surface.get_width() + 10
screen.blit(self.text_surface, (self.input_rect.x + 5, self.input_rect.y + 5))
def naming():
global name_text
if events.type == KEYDOWN:
if keys[K_BACKSPACE]:
name_text = name_text[:-1]
screen.fill((0, 0, 0))
rect_1 = Rectangle(200, 200)
else:
name_text += events.unicode
while True:
rect_1 = Rectangle(200, 200)
for events in event.get():
keys = key.get_pressed()
naming()
if events.type == QUIT:
quit()
display.update()
time.delay(1)
Rectangle.text_surface
是一个 PyGame 表面。因此,您只需调用 self.text_surface.get_width()
.
即可轻松获得边界框的精确宽度
但是 border-rect 的起始尺寸为 140,因此无论新的(更长的)宽度是多少,此尺寸都必须是 140 或 的最大值。另一个问题是当矩形 re-sizes 时,旧的矩形被留下了。因此,每当我们现在 re-draw 矩形时,它会将背景擦除为黑色。
这一切都可以很容易地封装到现有的 __init__()
:
def __init__(self, x, y):
self.x = x
self.y = y
self.text_surface = name_font.render(name_text, True, (255, 255, 255))
rect_width = max( 140, 10 + self.text_surface.get_width() ) # Adjust the width
color = Color('lightskyblue3')
self.input_rect = Rect(x, y, rect_width, 32) # Use new width (if any)
draw.rect(screen, (0,0,0) , self.input_rect, 0) # Erase any existing rect
draw.rect(screen, color, self.input_rect, 2)
self.input_rect.w = self.text_surface.get_width() + 10
screen.blit(self.text_surface, (self.input_rect.x + 5, self.input_rect.y + 5))
在这个程序中,当用户键入更多文本时,我希望矩形在用户键入时自动变长,以将字母保留在矩形内。但是,当文本变长时,它不会更新矩形。我该如何解决这个问题?
from pygame import *
init()
screen = display.set_mode((800, 600))
name_font = font.Font(None, 32)
name_text = ''
class Rectangle:
def __init__(self, x, y):
self.x = x
self.y = y
self.input_rect = Rect(x, y, 140, 32)
self.text_surface = name_font.render(name_text, True, (255, 255, 255))
color = Color('lightskyblue3')
draw.rect(screen, color, self.input_rect, 2)
self.input_rect.w = self.text_surface.get_width() + 10
screen.blit(self.text_surface, (self.input_rect.x + 5, self.input_rect.y + 5))
def naming():
global name_text
if events.type == KEYDOWN:
if keys[K_BACKSPACE]:
name_text = name_text[:-1]
screen.fill((0, 0, 0))
rect_1 = Rectangle(200, 200)
else:
name_text += events.unicode
while True:
rect_1 = Rectangle(200, 200)
for events in event.get():
keys = key.get_pressed()
naming()
if events.type == QUIT:
quit()
display.update()
time.delay(1)
Rectangle.text_surface
是一个 PyGame 表面。因此,您只需调用 self.text_surface.get_width()
.
但是 border-rect 的起始尺寸为 140,因此无论新的(更长的)宽度是多少,此尺寸都必须是 140 或 的最大值。另一个问题是当矩形 re-sizes 时,旧的矩形被留下了。因此,每当我们现在 re-draw 矩形时,它会将背景擦除为黑色。
这一切都可以很容易地封装到现有的 __init__()
:
def __init__(self, x, y):
self.x = x
self.y = y
self.text_surface = name_font.render(name_text, True, (255, 255, 255))
rect_width = max( 140, 10 + self.text_surface.get_width() ) # Adjust the width
color = Color('lightskyblue3')
self.input_rect = Rect(x, y, rect_width, 32) # Use new width (if any)
draw.rect(screen, (0,0,0) , self.input_rect, 0) # Erase any existing rect
draw.rect(screen, color, self.input_rect, 2)
self.input_rect.w = self.text_surface.get_width() + 10
screen.blit(self.text_surface, (self.input_rect.x + 5, self.input_rect.y + 5))