MC.Steve 发表于 2026-5-3 13:49:12

简易聊天系统【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()

正在改进~~~~~~~

FishC 发表于 2026-5-3 13:49:24

评分:8 / 10

代码整体结构清晰,实现了聊天界面的基本框架,非常适合初学者入门 pygame_gui。


[*]优点: 初始化简洁,UI组件布局合理,事件处理逻辑正确,发送按钮能正确获取输入并追加到历史框。
[*]可改进点:
1. 消息追加时缺少换行符,所有消息会连成一行。建议在 message_text 后添加 "<br>" 实现换行。
2. 未支持键盘回车发送(需监听 pygame.KEYDOWN 事件)。
3. 聊天框长度固定,消息过多时无法滚动。可考虑用 UIScrollingContainer 或定期清理旧消息。
4. 缺少对中文字体的支持说明(当前仅英文)。


作为 beta0.1 版本,核心功能完整,建议后续增加换行、回车发送、滚动条等交互优化。继续加油!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 简易聊天系统【pygame + pygame_gui】beta0.1