如何解决Pygame显示多余方框符号的问题?
问题原因分析
你看到的方框状符号(或是显示出来的[]和引号),本质是两个问题叠加导致的:
- 直接将列表转为字符串传递给绘制函数:当你把
inventory列表直接塞进字符串模板(比如f"You have: {self.inventory}")时,Python会自动把列表转成它的默认字符串形式——用[]包裹元素,元素自带引号(比如['key'])。如果你的自定义绘制字体不支持方括号/单引号这类字符,就会显示成方框(这是字体缺失字符时的占位符)。 strip()无效的原因:strip()方法只能移除字符串首尾的指定字符,而这些括号/方框是在字符串中间,所以完全起不到作用。
解决办法
1. 手动拼接inventory为可读文本
不要直接用列表的默认字符串形式,而是把列表里的元素拼接成自然的句子格式。比如用逗号分隔元素:
if self.paused: # 先处理物品列表为友好的文本 if self.inventory: # 用逗号连接所有物品,比如['key', 'apple']变成"key, apple" items_str = ", ".join(self.inventory) else: # 空列表时显示提示 items_str = "nothing" # 绘制暂停文本(替换成你的坐标和样式参数) self.screen.draw_text("Paused", x=100, y=50, font_size=30, color=(255,255,255)) # 绘制物品文本 self.screen.draw_text(f"You have: {items_str}", x=100, y=100, font_size=20, color=(255,255,255))
2. 检查字体支持(如果还有方框)
如果处理后还是有方框,那大概率是你用的自定义字体缺少某些常用字符(比如逗号、空格)。换一个字符覆盖更完整的字体(比如系统默认的Arial、Roboto这类)试试,就能解决字符无法渲染的问题。
内容的提问来源于stack exchange,提问作者PythonPeon
相关产品推荐
相关产品推荐

