Pygame开发中无法从子函数调用按钮到主函数问题求助
问题说明
- 执行顺序错误:
buttons()函数调用放在了主循环之后,主循环运行期间这行代码永远不会执行,按钮实例从未被创建。 - 作用域逻辑错误:
buttons()函数内创建的start_button是局部变量,外部主循环无法直接访问;你当前设计的arg1参数完全冗余,未定义就直接调用还会触发变量不存在报错。 - 方法调用错误:退出时的
pygame.QUIT()写法错误,QUIT是事件常量,退出Pygame初始化的正确方法是小写开头的pygame.quit()。
修复方案
你要实现“按需调用按钮”的需求,直接让子函数返回按钮实例,加个控制变量判断是否需要渲染即可,修改后的可运行代码如下:
import sys import pygame import button pygame.init() screen = pygame.display.set_mode((800, 600)) pygame.display.set_caption("Main Page") clock = pygame.time.Clock() running = True start_image = pygame.image.load('Sprites/play.png').convert_alpha() # 子函数负责生成按钮实例返回 def create_start_button(): return button.Button(350, 100, start_image, 0.2) # 控制按钮是否显示的开关,需要显示时设为True,不需要时设为False show_start_button = True start_button = create_start_button() if show_start_button else None while running: clock.tick(60) for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # 只有按钮存在时才执行绘制和点击判断 if start_button: if start_button.draw(screen): print("按钮被点击") # 点击后隐藏按钮直接赋值为None即可 # start_button = None pygame.display.update() pygame.quit() sys.exit()
额外说明
如果后续要动态切换按钮显示状态,比如进入游戏后隐藏主菜单按钮,回到主菜单再显示,只要修改show_start_button的取值,重新调用create_start_button()生成按钮实例即可,不用把按钮的创建逻辑耦合在主循环里。
内容的提问来源于stack exchange,提问作者Sleepingsouls
相关产品推荐
相关产品推荐

