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

如何通过按钮与回调方法退出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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:22:51