一、效果



二、代码

这个代码还有很多地方需要优化。比如绘制文字的时候,每帧都生成了surface等等问题,以后有空我再优化。

当前代码修改时间:2018年11月1日 15:16:41
import pygame class TextBox: def __init__(self, w, h, x, y, font=None,
callback=None): """ :param w:文本框宽度 :param h:文本框高度 :param x:文本框坐标 :param y:文本框坐标
:param font:文本框中使用的字体 :param callback:在文本框按下回车键之后的回调函数 """ self.width = w
self.height = h self.x = x self.y = y self.text = "" # 文本框内容 self.callback =
callback # 创建 self.__surface = pygame.Surface((w, h)) #
如果font为None,那么效果可能不太好,建议传入font,更好调节 if font is None: self.font =
pygame.font.Font(None, 32) # 使用pygame自带字体 else: self.font = font def draw(self,
dest_surf): text_surf = self.font.render(self.text, True, (255, 255, 255))
dest_surf.blit(self.__surface, (self.x, self.y)) dest_surf.blit(text_surf,
(self.x, self.y + (self.height - text_surf.get_height())), (0, 0, self.width,
self.height)) def key_down(self, event): unicode = event.unicode key =
event.key # 退位键 if key == 8: self.text = self.text[:-1] return # 切换大小写键 if key
== 301: return # 回车键 if key == 13: if self.callback is not None:
self.callback() return if unicode != "": char = unicode else: char = chr(key)
self.text += char def callback(): print("回车测试") def main(): # 英文文本框demo
pygame.init() winSur = pygame.display.set_mode((640, 480)) # 创建文本框 text_box =
TextBox(200, 30, 200, 200, callback=callback) # 游戏主循环 while True: for event in
pygame.event.get(): if event.type == pygame.QUIT: exit() elif event.type ==
pygame.KEYDOWN: text_box.key_down(event) pygame.time.delay(33) winSur.fill((0,
50, 0)) text_box.draw(winSur) pygame.display.flip() if __name__ == '__main__':
main()
 

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信