鱼C论坛

 找回密码
 立即注册
查看: 705|回复: 45

[作品展示] 【pygameGUI2.0】pygame的输入框(支持中文)

[复制链接]
发表于 2024-2-14 21:17:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 cjjJasonchen 于 2024-2-14 21:22 编辑


pygame中制作可以支持中文输入的文本框~


话不多说,看代码:
  1. import pygame
  2. import os
  3. from pygame.locals import *

  4. os.environ["SDL_IME_SHOW_UI"] = "1" # 显示输入候选框 0是False 1是True

  5. pygame.init()
  6. screen = pygame.display.set_mode((400, 300))

  7. font = pygame.font.SysFont("arialms", 28)

  8. text = ""

  9. running = True
  10. while running:
  11.     pos = pygame.mouse.get_pos()
  12.     pygame.key.start_text_input() # 打开输入模式(默认就是打开的
  13.     #pygame.key.stop_text_input() # 关闭
  14.     """调用上面的stop_text_input()方法可以使得游戏在一开始时就不会被输入法阻断,
  15.     不会出现“点击wasd无反应,把电脑键盘键帽扣掉的事故”"""
  16.     pygame.key.set_text_input_rect((0,0,0,0)) # 输入法框框的矩形位置,一般只有前两位有效,代表输入法左上角的位置
  17.     for event in pygame.event.get():
  18.         if event.type == QUIT:
  19.             running = False
  20.         elif event.type == KEYDOWN:
  21.             if event.key == K_BACKSPACE:
  22.                 text = text[:-1] # 如果是backspace就删除一个字

  23.         if event.type == TEXTINPUT: # 如果是输入文字,就加入到字符串内显示
  24.             text += event.text
  25.     screen.fill((255, 255, 255))
  26.     text_image = font.render(text, True, (0, 0, 0))
  27.     screen.blit(text_image, (10, 10))

  28.     pygame.display.update()

  29. pygame.quit()

复制代码

以下是效果:

展示~

展示~


注释写的还算比较可以吧~虽然有些乱,但是我刚刚补了一些,就将就着看吧~等到正式的pygameGUI2.0版本更新输入框时会放出更加好看和完整的源码
(这里只做了最基本的功能,但是已经是一个不辍的开始啦!~

评分

参与人数 4荣誉 +16 鱼币 +1 贡献 +9 收起 理由
zhangchenyvn + 5 + 3
某一个“天” + 1 + 1 鱼C有你更精彩^_^
python爱好者. + 5 + 3 无条件支持楼主!
歌者文明清理员 + 5 + 3

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-2-14 21:18:03 | 显示全部楼层
这段代码实现了一个简单的支持中文输入的文本框。首先,我们需要导入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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-14 21:22:49 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-14 21:23:01 | 显示全部楼层


嗨,请问有什么问题我可以帮助您解答呢?

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-14 21:25:17 | 显示全部楼层
FishC 发表于 2024-2-14 21:23
嗨,请问有什么问题我可以帮助您解答呢?

以上回复来自 FishC AI 小助理,如未能正确解答您的问题, ...

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-14 21:25:30 | 显示全部楼层


非常抱歉,我可能误解了您的意图。请问有什么问题或者困惑我可以解答或者帮助您处理吗?

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-14 21:40:47 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-14 21:41:00 | 显示全部楼层


嗨,很高兴见到您,有什么关于Python的问题我可以帮助您解答吗?

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-14 22:02:16 | 显示全部楼层
如果可以有更多默认字体在一个文件里,然后其余字体可以爬虫现下就更好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-14 22:04:52 | 显示全部楼层
python爱好者. 发表于 2024-2-14 22:02
如果可以有更多默认字体在一个文件里,然后其余字体可以爬虫现下就更好了

好提议,但是我爬虫水平比较烂

有没有推荐的网站
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-14 22:07:26 | 显示全部楼层
cjjJasonchen 发表于 2024-2-14 22:04
好提议,但是我爬虫水平比较烂

有没有推荐的网站

https://51font.17font.com/

点评

他说的是可以提供接口爬取字体的网站  发表于 2024-2-15 07:26
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-14 22:08:19 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-14 22:10:10 | 显示全部楼层
我觉得像这种会被广泛运用于各种场景的功能都应单独做一个类来实现,方便做其他程序引用,也能使程序整体更整洁,最后main像飞机大战一样将他们组合在一起

点评

我很赞同!: 5.0
我很赞同!: 5
非常好的建议  发表于 2024-2-14 22:15

评分

参与人数 1荣誉 +5 贡献 +3 收起 理由
cjjJasonchen + 5 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-14 22:36:42 | 显示全部楼层
建议加上闪烁的光标(不知道叫什么,一闪一闪的用于定位输入文本位置的那玩意)

爬字体的话我可以帮你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-14 22:41:06 | 显示全部楼层
陶远航 发表于 2024-2-14 22:36
建议加上闪烁的光标(不知道叫什么,一闪一闪的用于定位输入文本位置的那玩意)

爬字体的话我可以帮你


谢谢你!
光标正式版一定会有的,上面的这玩意主要是告诉大家可以实现了,仅此而已
爬虫如果有需要我会再来找你的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-14 22:41:54 | 显示全部楼层
cjjJasonchen 发表于 2024-2-14 22:41
谢谢你!
光标正式版一定会有的,上面的这玩意主要是告诉大家可以实现了,仅此而已
爬虫如果有需要我 ...

好的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-14 22:43:33 | 显示全部楼层
好棒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-2-15 07:21:08 | 显示全部楼层
本帖最后由 歌者文明清理员 于 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)

至于输入法图标啥的,不用了

评分

参与人数 1荣誉 +5 贡献 +3 收起 理由
python爱好者. + 5 + 3 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-15 07:25:45 | 显示全部楼层
python爱好者. 发表于 2024-2-14 22:02
如果可以有更多默认字体在一个文件里,然后其余字体可以爬虫现下就更好了

这个我觉得不用,你用其他软件里面字体也需要提前下载安装好才能用

pygame.font.Font("xxx.ttf", size)

也可以结合pygame.font.get_fonts

@cjjJasonchen

点评

我很赞同!: 5.0
我很赞同!: 5
这样是简便多了,但对于那些新手用户还是不太友好,所以我建议在使用默认中文字体的情况下,再添加可以自由选择字体的选择,毕竟那里面得到的中文字体还是太少...  发表于 2024-2-15 08:08

评分

参与人数 1荣誉 +5 贡献 +3 收起 理由
python爱好者. + 5 + 3 C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-15 08:10:04 | 显示全部楼层
歌者文明清理员 发表于 2024-2-15 07:25
这个我觉得不用,你用其他软件里面字体也需要提前下载安装好才能用

pygame.font.Font("xxx.ttf", size ...

自由度会更高些
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 01:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表