pygame实现中文输入框的示例

本文主要介绍了pygame实现中文输入框的示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

注意:

pygame2.0已经支持输入法了,本文的方法仅供参考

为了解决pygame不能输入中文的问题,就写了一个中文输入框

1.效果

2.源码

以下代码需要安装:

 pip install Pinyin2Hanzi

然后就可以直接运行啦

注意:你电脑里如果没有microsoftyaheimicrosoftyaheiui字体的话,请自行找一个中文字体

 import string import pygame from Pinyin2Hanzi import DefaultDagParams from Pinyin2Hanzi import dag 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 # 创建背景surface self.__surface = pygame.Surface((w, h)) # 如果font为None,那么效果可能不太好,建议传入font,更好调节 if font is None: self.font = pygame.font.SysFont('microsoftyaheimicrosoftyaheiui', 16) else: self.font = font self.dagparams = DefaultDagParams() self.state = 0  # 0初始状态 1输入拼音状态 self.page = 1  # 第几页 self.limit = 5  # 显示几个汉字 self.pinyin = '' self.word_list = []  # 候选词列表 self.word_list_surf = None  # 候选词surface self.buffer_text = ''  # 联想缓冲区字符串 def create_word_list_surf(self): """ 创建联想词surface """ word_list = [str(index + 1) + '.' + word for index, word in enumerate(self.word_list)] text = " ".join(word_list) self.word_list_surf = self.font.render(text, True, (255, 255, 255)) def draw(self, dest_surf): # 创建文字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)) # 绘制联想词 if self.state == 1: dest_surf.blit(self.word_list_surf, (self.x, self.y + (self.height - text_surf.get_height()) - 30), (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] if self.state == 1: self.buffer_text = self.buffer_text[:-1] return # 切换大小写键 if key == 301: return # 回车键 if key == 13: if self.callback: self.callback(self.text) return # print(key) # 空格输入中文 if self.state == 1 and key == 32: self.state = 0 self.text = self.text[:-len(self.buffer_text)] + self.word_list[0] self.word_list = [] self.buffer_text = '' self.page = 1 return # 翻页 if self.state == 1 and key == 61: self.page += 1 self.word_list = self.py2hz(self.buffer_text) if len(self.word_list) == 0: self.page -= 1 self.word_list = self.py2hz(self.buffer_text) self.create_word_list_surf() return # 回退 if self.state == 1 and key == 45: self.page -= 1 if self.page <1: self.page=1 self.word_list=self.py2hz(self.buffer_text) self.create_word_list_surf() return # 选字 if self.state== 1 and key in (49, 50, 51, 52, 53): 0 len(self.word_list) <=key - 49: self.text + self.word_list[key 49] [] self.buffer_text unicode !="" : char else: chr(key) string.ascii_letters: self.py2hz(self.buffer_text) print(self.buffer_text) def safe_key_down(self, event): try: self.key_down(event) except: self.reset() py2hz(self, pinyin): result=dag(self.dagparams, (pinyin,), path_num=self.limit * self.page)[ (self.page 1) self.limit:self.page self.limit] data for item result] reset(self): 异常的时候还原到初始状态 0初始状态 1输入拼音状态 第几页 self.limit=5 显示几个汉字 self.pinyin='' 候选词列表 self.word_list_surf=None 候选词surface '' 联想缓冲区字符串 callback(text): print("回车测试", text) main(): 英文文本框demo pygame.init() winsur=pygame.display.set_mode((640, 480)) 创建文本框 text_box=TextBox(200, 30, 200, callback=callback) 游戏主循环 while true: event pygame.event.get(): event.type== pygame.quit: exit() elif pygame.keydown: 调用文本框键盘按下事件 text_box.safe_key_down(event) pygame.time.delay(33) winsur.fill((0, 0)) 绘制文本框 text_box.draw(winsur) pygame.display.flip() __name__== '__main__': main()< pre>

3.用法

用法很简单

1.创建一个TextBox对象

TextBox参数说明:

  • w:输入框的宽
  • h:输入框的高
  • x:输入框左上角x坐标
  • y:输入框左上角y坐标
  • font:字体(可以不传)
  • callback:按下回车之后的回调函数,这个函数必须有一个参数用来接收文本框中的字符串

2.在键盘按下事件时调用TextBox对象的safe_key_down(event)方法,记住要把pygame的event传进去

3.记得调用TextBox的draw(surface)方法,显示输入框

到此这篇关于pygame实现中文输入框的示例的文章就介绍到这了,更多相关pygame 中文输入框内容请搜索0133技术站以前的文章或继续浏览下面的相关文章希望大家以后多多支持0133技术站!

以上就是pygame实现中文输入框的示例的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » python