无法将局部变量传递给按钮装饰器

0 投票
1 回答
31 浏览
提问于 2025-04-14 17:15

我该如何把 self.canCraft 这个变量传递给装饰器呢?我明白为什么现在这样做不行,但就是找不到解决办法。我不想用全局变量来处理这个问题。

class CraftView(discord.ui.View):
    def __init__(self, viewOwner, craftItem, canCraft):
        super().__init__()
        self.viewOwner = viewOwner
        self.craftItem = craftItem
        self.canCraft = canCraft

    @discord.ui.button(label="Craft", style=discord.ButtonStyle.primary, emoji="", disabled=self.canCraft)
    async def button_callback(self, interaction: Interaction, button: ui.Button):
        pass

1 个回答

0

你可能更适合去创建一个新的类,继承自 discord.ui.Button,然后把它添加到一个视图中,像这样-

import discord

class CraftButton(discord.ui.Button):
    def __init__(self, label:str, emoji:str, disabled:bool, style:discord.ButtonStyle=discord.ButtonStyle.primary):
        super().__init__(label=label, emoji=emoji, disabled=disabled, style=style)

    async def callback(interaction:discord.Interaction):
        ...

class CraftView(discord.ui.View):
    def __init__(self, view_owner, craft_item, can_craft):
        super().__init__()
        self.view_owner = view_owner
        self.craft_item = craft_item
        self.add_item(CraftButton("Craft", "", can_craft))

撰写回答