【pygameGUI2.0】pygame的输入框(支持中文)
本帖最后由 cjjJasonchen 于 2024-2-14 21:22 编辑pygame中制作可以支持中文输入的文本框~
话不多说,看代码:
import pygame
import os
from pygame.locals import *
os.environ["SDL_IME_SHOW_UI"] = "1" # 显示输入候选框 0是False 1是True
pygame.init()
screen = pygame.display.set_mode((400, 300))
font = pygame.font.SysFont("arialms", 28)
text = ""
running = True
while running:
pos = pygame.mouse.get_pos()
pygame.key.start_text_input() # 打开输入模式(默认就是打开的
#pygame.key.stop_text_input() # 关闭
"""调用上面的stop_text_input()方法可以使得游戏在一开始时就不会被输入法阻断,
不会出现“点击wasd无反应,把电脑键盘键帽扣掉的事故”"""
pygame.key.set_text_input_rect((0,0,0,0)) # 输入法框框的矩形位置,一般只有前两位有效,代表输入法左上角的位置
for event in pygame.event.get():
if event.type == QUIT:
running = False
elif event.type == KEYDOWN:
if event.key == K_BACKSPACE:
text = text[:-1] # 如果是backspace就删除一个字
if event.type == TEXTINPUT: # 如果是输入文字,就加入到字符串内显示
text += event.text
screen.fill((255, 255, 255))
text_image = font.render(text, True, (0, 0, 0))
screen.blit(text_image, (10, 10))
pygame.display.update()
pygame.quit()
以下是效果:
注释写的还算比较可以吧~虽然有些乱,但是我刚刚补了一些,就将就着看吧~等到正式的pygameGUI2.0版本更新输入框时会放出更加好看和完整的源码
(这里只做了最基本的功能,但是已经是一个不辍的开始啦!~{:10_254:} )
这段代码实现了一个简单的支持中文输入的文本框。首先,我们需要导入pygame以及相关的模块。然后,使用`os.environ = "1"`来显示输入候选框。
接下来,我们初始化pygame,并创建一个窗口大小为400x300的屏幕。然后,我们选择字体(这里选择的是"arialms"字体,并设置字号为28)。定义一个空字符串`text`来存储输入的内容。
然后,进入游戏主循环,获取鼠标位置。调用`pygame.key.start_text_input()`打开输入模式(默认就是打开的)。
在处理事件的循环中,如果检测到QUIT(退出)事件,则将`running`标志设置为False,退出游戏。如果检测到KEYDOWN(按键按下)事件,并且按下的是BACKSPACE(退格)键,则删除一个字符。
如果检测到TEXTINPUT(输入文字)事件,则将输入的文字添加到`text`字符串中。
在每次循环中,填充屏幕为白色,然后使用选择的字体和颜色渲染`text`字符串,并将其显示在屏幕上。
最后,调用`pygame.display.update()`更新屏幕。
至于输入框显示的效果,我无法直接在这里展示,你可以尝试运行代码看看效果。希望我解答了你的问题!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 @歌者文明清理员 cjjJasonchen 发表于 2024-02-14 21:22
@歌者文明清理员
嗨,请问有什么问题我可以帮助您解答呢?
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-2-14 21:23
嗨,请问有什么问题我可以帮助您解答呢?
以上回复来自 FishC AI 小助理,如未能正确解答您的问题, ...
? 歌者文明清理员 发表于 2024-02-14 21:25
?
非常抱歉,我可能误解了您的意图。请问有什么问题或者困惑我可以解答或者帮助您处理吗?
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 @python爱好者. cjjJasonchen 发表于 2024-02-14 21:40
@python爱好者.
嗨,很高兴见到您,有什么关于Python的问题我可以帮助您解答吗?
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 如果可以有更多默认字体在一个文件里,然后其余字体可以爬虫现下就更好了 python爱好者. 发表于 2024-2-14 22:02
如果可以有更多默认字体在一个文件里,然后其余字体可以爬虫现下就更好了
好提议,但是我爬虫水平比较烂{:10_266:}
有没有推荐的网站 cjjJasonchen 发表于 2024-2-14 22:04
好提议,但是我爬虫水平比较烂
有没有推荐的网站
https://51font.17font.com/ https://zhuanlan.zhihu.com/p/547811905?utm_id=0 我觉得像这种会被广泛运用于各种场景的功能都应单独做一个类来实现,方便做其他程序引用,也能使程序整体更整洁,最后main像飞机大战一样将他们组合在一起 建议加上闪烁的光标(不知道叫什么,一闪一闪的用于定位输入文本位置的那玩意)
爬字体的话我可以帮你 陶远航 发表于 2024-2-14 22:36
建议加上闪烁的光标(不知道叫什么,一闪一闪的用于定位输入文本位置的那玩意)
爬字体的话我可以帮你
谢谢你!
光标正式版一定会有的,上面的这玩意主要是告诉大家可以实现了,仅此而已
爬虫如果有需要我会再来找你的! cjjJasonchen 发表于 2024-2-14 22:41
谢谢你!
光标正式版一定会有的,上面的这玩意主要是告诉大家可以实现了,仅此而已
爬虫如果有需要我 ...
好的{:10_256:} 好棒{:5_108:} 本帖最后由 歌者文明清理员 于 2024-2-15 08:27 编辑
cjjJasonchen 发表于 2024-2-14 22:41
谢谢你!
光标正式版一定会有的,上面的这玩意主要是告诉大家可以实现了,仅此而已
爬虫如果有需要我 ...
这个很简单,在Entry输入框类里加上show_cursor
可以设置userevent,每隔0.6秒触发(参数设置秒数:cursor_interval_seconds),mainloop:show_cursor=not show_cursor
Entry的image需要每帧反复刷新
输入法左上角位置是(self.rect.top+self.font.get_height(), self.rect.left)
至于输入法图标啥的,不用了 python爱好者. 发表于 2024-2-14 22:02
如果可以有更多默认字体在一个文件里,然后其余字体可以爬虫现下就更好了
这个我觉得不用,你用其他软件里面字体也需要提前下载安装好才能用
pygame.font.Font("xxx.ttf", size)
也可以结合pygame.font.get_fonts
@cjjJasonchen 歌者文明清理员 发表于 2024-2-15 07:25
这个我觉得不用,你用其他软件里面字体也需要提前下载安装好才能用
pygame.font.Font("xxx.ttf", size ...
自由度会更高些