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

Discord.py点击按钮触发Modal报错:无法找到项目空位的解决方法

Discord.py 按钮触发Modal时出现ValueError问题

点击按钮触发Modal时抛出ValueError: could not find open space for item错误,相关代码及报错信息如下:

相关代码

class ButtonModal(discord.ui.View):
  def __init__(self):
    super().__init__(timeout = None)
  @discord.ui.button(label = "Compile MODAL", emoji="📑",custom_id = "Role1", style = discord.ButtonStyle.primary)
  async def button1(self, interaction, button):
    user = interaction.user
    await interaction.response.send_modal(MyModal())

报错信息

[0m ?[31mERROR   ?[0m ?[35mdiscord.ui.view?[0m Ignoring exception in view <ButtonModal timeout=None children=1> for item <Button style=<ButtonStyle.primary: 1> url=None disabled=False label='Compile MODAL' emoji=<PartialEmoji animated=False name='�' id=None> row=None>
?[31mTraceback (most recent call last):
  File "C:\Users\Administrator\Desktop\RequisBOT\bot-env\Lib\site-packages\discord\ui\view.py", line 425, in _scheduled_task
    await item.callback(interaction)
  File "c:\Users\Administrator\Desktop\RequisBOT\bot.py", line 67, in button1
    await interaction.response.send_modal(MyModal())
                                          ^^^^^^^^^
  File "C:\Users\Administrator\Desktop\RequisBOT\bot-env\Lib\site-packages\discord\ui\modal.py", line 135, in __init__
    super().__init__(timeout=timeout)
  File "C:\Users\Administrator\Desktop\RequisBOT\bot-env\Lib\site-packages\discord\ui\view.py", line 184, in __init__
    self.__weights = _ViewWeights(self._children)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Administrator\Desktop\RequisBOT\bot-env\Lib\site-packages\discord\ui\view.py", line 99, in __init__
    self.add_item(item)
  File "C:\Users\Administrator\Desktop\RequisBOT\bot-env\Lib\site-packages\discord\ui\view.py", line 116, in add_item
    index = self.find_open_space(item)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Administrator\Desktop\RequisBOT\bot-env\Lib\site-packages\discord\ui\view.py", line 106, in find_open_space
    raise ValueError('could not find open space for item')
ValueError: could not find open space for item?[0m

解决方案

这个错误的核心原因是Modal的组件布局违反了Discord的交互组件规则,具体修正方式如下:

  • 严格遵守Modal布局限制:Discord的Modal中,每个ActionRow(行)只能放置1个TextInput组件,不能像普通View那样一行放多个控件。如果你的MyModal类中把多个TextInput放在了同一行,会直接触发该错误。
  • 控制组件数量:Modal最多只能包含5个TextInput(对应5行),超出数量也会导致布局空间不足。
  • 显式指定row参数:为每个TextInput明确设置row值(范围0-4),避免自动布局时出现冲突。示例代码:
class MyModal(discord.ui.Modal, title="编译设置"):
    def __init__(self):
        super().__init__(timeout=None)
        # 每个输入框单独占一行
        self.add_item(discord.ui.TextInput(label="MOD名称", placeholder="输入你的MOD名称", row=0))
        self.add_item(discord.ui.TextInput(label="编译参数", placeholder="填写编译参数", row=1))
        # 最多可添加到row=4,共5个输入框
  • 检查Modal继承与初始化:确保MyModal正确继承discord.ui.Modal,且自定义__init__方法时调用了父类的__init__。

内容的提问来源于stack exchange,提问作者bakembo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 05:55:17