Kivy - 致命的Python错误:(pygame降落伞)段错误

1 投票
1 回答
1609 浏览
提问于 2025-04-17 20:42

我正在尝试使用kivy这个库,但我的代码总是出现“段错误”,我搞不清楚原因。我怀疑我对Python中的类的理解有问题。

通过反复试验,我发现注释掉这行代码:

#p.open()

可以解决这个问题,但我还是无法理解这个错误的原因。谢谢!

错误信息:

致命的Python错误:(pygame降落伞)段错误

Python代码

class popper(Popup):
    yazi= StringProperty("notsetyet")

    def __init__(self, texty):
       self.yazi = text
       print texty


class boxxy(BoxLayout):
   ...
   def on_press(self):
      p = popper("test_value")
      p.open()       
   ...

.kv文件

<popper>

    title: "Warn"
    size_hint: 0.5 , 0.5
    BoxLayout:
        orientation: 'vertical'
        Label:
            text:     root.yazi
        Button:
            text: "close"
            on_press: root.dismiss()

1 个回答

1

我不太清楚你问题的具体原因,但你的代码里有好几个错误。而且,如果你能提供一个完整的、能正常运行的简单示例,那样会更容易找到问题所在。

主要的问题是,你在定义 __init__ 方法时,没有调用 super(Popper, self).__init__(**kwargs)(而且这个方法可能也需要用 def __init__(texty, **kwargs) 来定义,以便接收额外的参数)。这一步很重要,因为正常的 __init__ 方法会设置所有正常的控件和弹出窗口的行为。

另外,你写的是 self.yazi = text,其实应该是 self.yazi = texty

最后,Python 里有个常规习惯是类名要以大写字母开头。虽然这通常只是个风格上的建议,不是强制要求,但我觉得在 kv 语言中有时候是需要遵循的,所以如果不这样做,可能会导致程序崩溃或出现奇怪的行为。

撰写回答