如何通过按钮与回调方法退出Python程序?代码调试求助
帮你揪出代码里的小问题啦!
嘿,我瞅了下你的代码,发现两个很容易犯的低级小错误,咱们一个个来解决:
1. 共享的hover状态坑
你把hover定义成了类属性(直接写在class menu:下面),这就意味着所有菜单实例会共用同一个hover状态——只要有一个菜单被鼠标hover,所有菜单都会变成hover的黑色!
要改成每个实例单独拥有的属性,把self.hover = False移到__init__方法里:
class menu: def __init__(self, text, pos): self.hover = False # 每个菜单实例单独存自己的hover状态 self.text = text self.pos = pos self.set_rect() self.draw() # 其他方法不变...
2. 未完成的set_rect方法
你代码里的self.render.get...明显没写完,这里需要调用get_rect()来获取文本渲染后的矩形区域,还要把它和你传入的pos位置绑定(比如用topleft让菜单左上角对齐传入的坐标):
def set_rect(self): self.set_render() self.rect = self.render.get_rect(topleft=self.pos) # 补全这行代码
额外补充:hover状态的触发逻辑(大概率你需要这个)
虽然你没贴事件循环的代码,但菜单的hover状态需要实时检测鼠标位置,你得在主循环里给每个菜单实例更新hover值,比如:
# 假设你创建了菜单列表,比如 menus = [menu("开始", (100,100)), menu("退出", (100,200))] while True: # 处理事件... mouse_pos = pygame.mouse.get_pos() for menu_item in menus: # 检测鼠标是否在菜单矩形内 menu_item.hover = menu_item.rect.collidepoint(mouse_pos) menu_item.draw() # 重新绘制,更新颜色 pygame.display.update()
这样改完,你的菜单应该就能正常显示hover颜色变化啦!
内容的提问来源于stack exchange,提问作者ChewyCarrot
相关产品推荐
相关产品推荐

