简易聊天系统【pygame + pygame_gui】beta0.1
本帖最后由 MC.Steve 于 2026-5-3 14:46 编辑beta0.1版本基本功能:
1.实现输出英文字体
2.实现聊天框、发送键、聊天界面
问题:
1字体变方框
源码:
import pygame
import pygame_gui
# --- 1. 初始化设置 ---
pygame.init()
WINDOW_SIZE = (600, 500)
screen = pygame.display.set_mode(WINDOW_SIZE)
pygame.display.set_caption('简易聊天界面')
# --- 2. 创建 UIManager ---
# 【关键修改】只传入窗口大小,不传主题路径
# 这样会使用 pygame_gui 的内置默认样式,避开字体扫描的 bug
manager = pygame_gui.UIManager(WINDOW_SIZE)
# --- 3. 创建 UI 元素 ---
# 注意:因为没有自定义主题,背景色可能会是默认的灰色/黑色
chat_history = pygame_gui.elements.UITextBox(
relative_rect=pygame.Rect((10, 10), (580, 430)),
html_text="欢迎来到聊天室!<br>",
manager=manager
)
message_input = pygame_gui.elements.UITextEntryLine(
relative_rect=pygame.Rect((10, 450), (480, 40)),
manager=manager
)
send_button = pygame_gui.elements.UIButton(
relative_rect=pygame.Rect((500, 450), (90, 40)),
text='发送',
manager=manager
)
# --- 4. 主循环 ---
clock = pygame.time.Clock()
is_running = True
while is_running:
time_delta = clock.tick(60) / 1000.0
for event in pygame.event.get():
if event.type == pygame.QUIT:
is_running = False
manager.process_events(event)
if event.type == pygame_gui.UI_BUTTON_PRESSED:
if event.ui_element == send_button:
message_text = message_input.get_text()
if message_text.strip():
# 手动实现文本追加
current_text = chat_history.html_text
new_text = current_text + message_text + "<br>"
chat_history.set_text(new_text)
message_input.set_text("")
manager.update(time_delta)
screen.fill((30, 30, 30))
manager.draw_ui(screen)
pygame.display.flip()
pygame.quit()
正在改进~~~~~~~ 评分:8 / 10
代码整体结构清晰,实现了聊天界面的基本框架,非常适合初学者入门 pygame_gui。
[*]优点: 初始化简洁,UI组件布局合理,事件处理逻辑正确,发送按钮能正确获取输入并追加到历史框。
[*]可改进点:
1. 消息追加时缺少换行符,所有消息会连成一行。建议在 message_text 后添加 "<br>" 实现换行。
2. 未支持键盘回车发送(需监听 pygame.KEYDOWN 事件)。
3. 聊天框长度固定,消息过多时无法滚动。可考虑用 UIScrollingContainer 或定期清理旧消息。
4. 缺少对中文字体的支持说明(当前仅英文)。
作为 beta0.1 版本,核心功能完整,建议后续增加换行、回车发送、滚动条等交互优化。继续加油!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]