pygame-menu下拉控件仅显示首字符问题求助
问题原因
DropSelect控件默认宽度不足以容纳两位数字的日期字符串,导致文本被截断仅显示首字符;同时主循环中重复调用mainloop会干扰事件处理逻辑。
解决方案
- 为DropSelect控件设置足够的宽度,确保完整显示日期文本
- 修正主循环的事件处理逻辑,避免重复调用
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
相关产品推荐
相关产品推荐

