Pygame_widgets库Button按钮绑定函数无法执行且报语法错误
错误原因及修复方案
核心问题1:lambda语法非法
Python的lambda表达式仅支持编写可返回的单个表达式,禁止在lambda内部直接写赋值语句,你代码中onClick=lambda: basicKit = True 属于典型的语法错误,这是你看到配置项报错、按钮点击事件无法触发的直接原因。
核心问题2:流程逻辑冲突
你当前的代码执行顺序是先完整运行startWindow的pygame事件循环,直到窗口关闭后才会执行后续的命令行输入逻辑,就算按钮点击可以正常赋值,变量也无法跨流程传递到后续的输入逻辑中,且你代码中未预先定义basicKit变量,也没有对应使用逻辑。
修复方案
如果你要实现点击按钮直接进入Basic鼓组的效果,参考如下修改后的代码:
import basic import pygame as pg import pygame_widgets as pw from pygame_widgets.button import Button # 全局标记记录是否点击了按钮 basicKit = False def startWindow(): global basicKit pg.init() win = pg.display.set_mode((600, 600)) # 单独定义按钮点击触发的函数,不要用lambda写赋值逻辑 def on_btn_click(): global basicKit basicKit = True pg.quit() button = Button( win, 100, 100, 300, 150, text='进入Basic鼓组', fontSize=50, margin=20, inactiveColour=(255, 0, 0), pressedColour=(0, 255, 0), radius=20, onClick=on_btn_click ) run = True while run: events = pg.event.get() for event in events: if event.type == pg.QUIT: pg.quit() run = False quit() # 点击按钮后退出事件循环 if basicKit: run = False break win.fill((255, 255, 255)) button.listen(events) button.draw() pg.display.update() if __name__ == '__main__': stop = False print("* Welcome To \"Drum Easy\" V 1.0 *") startWindow() while stop == False: # 点击按钮直接进入Basic鼓组 if basicKit: basic.Kit() stop = True break kit = input("\nWhat Kit? \n\nBasic\n ^\n 1\n\n>") if kit == "1": basic.Kit() stop = True else: print('Invalid Kit')
内容的提问来源于stack exchange,提问作者Joseph Murphy
相关产品推荐
相关产品推荐

