You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pygame-menu下拉控件仅显示首字符问题求助

解决pygame-menu DropSelect仅显示首字符的问题

问题原因

DropSelect控件默认宽度不足以容纳两位数字的日期字符串,导致文本被截断仅显示首字符;同时主循环中重复调用mainloop会干扰事件处理逻辑。

解决方案

  1. 为DropSelect控件设置足够的宽度,确保完整显示日期文本
  2. 修正主循环的事件处理逻辑,避免重复调用mainloop

修改后的完整代码

import pygame
import pygame_menu as pm
import sys
from pygame.locals import *

WIDTH, HEIGHT = 1100, 800
WIN = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.init()

my_theme = pm.themes.THEME_DARK.copy()
my_theme.title = False
my_theme.background_color = (50, 100, 200)

setup_menu = pm.Menu('', WIDTH, HEIGHT, theme=my_theme)
days = ['01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31']

# 为DropSelect指定足够宽度,适配两位数字显示
setup_menu.add.dropselect(
    'Days',
    items=days,
    placeholder_add_to_selection_box=False,
    width=100  # 可根据字体大小调整此值
)

def main():
    run = True
    clock = pygame.time.Clock()

    while run:
        clock.tick(60)
        events = pygame.event.get()
        for event in events:
            if event.type == QUIT:
                run = False
                pygame.quit()
                sys.exit()

        # 统一处理菜单的更新与绘制,避免重复调用mainloop
        if setup_menu.is_enabled():
            setup_menu.update(events)
            setup_menu.draw(WIN)

        pygame.display.update()

if __name__ == "__main__":
    main()

备选方案:全局调整主题控件尺寸

如果需要统一设置所有控件的尺寸,可以修改主题的相关参数,无需单独为DropSelect设置宽度:

my_theme = pm.themes.THEME_DARK.copy()
my_theme.title = False
my_theme.background_color = (50, 100, 200)
my_theme.widget_width = 100  # 设置全局控件宽度
my_theme.widget_font_size = 20  # 调整字体大小以适配宽度

内容的提问来源于stack exchange,提问作者bmgrice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 00:47:06