向下拉式弱引用对象添加可变数量的控件已不存在

2024-04-19 01:13:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个下拉列表,里面有个月的列表。当选择了月份时,我尝试在第二个下拉列表中动态填充按钮,其中包含正确的天数。当我这样做时,我得到:

ReferenceError: weakly-referenced object no longer exists

以下是我的文件供参考:

在主.py公司名称:

^{pr2}$

在调度器.kv公司名称:

^{3}$

我认为这个问题是由Kivy代码而不是Python代码创建的。我所做的测试使我相信我引用DayDropDown小部件是错误的。但是,我不知道我会怎么做。我已经记下了,我该怎么做呢?如果这不是我的问题,那么还有什么可能导致ReferenceError被抛出?在

编辑:

把我的代码弄乱了一点。我创建了一个新的类“globAddable”,方法是“getID”(一个简单的返回self),并将setID放在那里。然后我设置我的setID现在赋值self.getID()添加到变量,然后将该变量用作要添加到globObjects(以前称为globIDs)字典的对象。在

我还为DropDown对象创建了一个新类,名为ExtDropArray,它位于DayDropDown中。我将populate()方法移到了这个新类中,这样它就可以由下拉菜单直接调用,而不是它的父BoxLayout。我让ExtDropArray和ExtDropDown从globAddable继承来公开setID(和隐式getID)方法。在

所有这些的最终结果都是一样的。当点击DayDropDown上的按钮时,我仍然看不到我的day下拉列表,并且在MonthDropDown上用不同的值进行测试后,我再次得到“ReferenceError:弱引用对象不再存在”错误。但是,我注意到有问题的行实际上是打开下拉列表的方法(drop.打开(ddRoot),在my.kv文件的第114行调用。这仍然不能给我足够的信息来知道是哪个部分导致了错误,不管是添加按钮到下拉列表还是调用open方法。有了这些新的信息,有人能推断出什么需要改变吗?在


Tags: 文件对象方法代码名称列表错误公司
1条回答
网友
1楼 · 发布于 2024-04-19 01:13:38

好吧,我终于弄明白了。在

我的ReferenceError不是我的方法造成的,而是我对DropDown对象实现的一个基本误解。解决办法很简单

<DayDropDown>:
    drop: drop.__self__
    ...

这花了我很长时间才找到,但却是以this文档的形式出现的。由于没有其他帖子提到这些引用错误,所以我把它放在这里供其他人使用,以防他们遇到类似的问题。在

相关问题 更多 >