2014-03-04 55 views
1

我正在試驗kivy,我一直在從下面的代碼中得到分段錯誤,並且無法弄清楚。我懷疑我對Python中的類的理解有問題。Kivy - 致命的Python錯誤:(pygame降落傘)分割錯誤

通過反覆試驗才發現評論

#p.open()

停止的問題,但我解決不了,也沒有理解錯誤。 感謝

錯誤:

Fatal Python error: (pygame parachute) Segmentation Fault

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

我不知道到底是什麼導致你的問題,但有多個漏洞在你的代碼中。另外,如果你能提供一個完整的工作最小的例子,這是最好的,這使得它更容易調試。

主要錯誤(很可能導致此錯誤)是您不要在您的__init__定義中調用super(Popper, self).__init__(**kwargs)(可能還需要用def __init__(texty, **kwargs)來定義以捕獲額外的參數)。這是非常重要的,因爲正常的__init__會設置所有正常的窗口小部件和彈出窗口行爲。

當您的意思是self.yazi = texty時,您還有self.yazi = text

最後,這是一個普通的Python約定,類名以大寫字母開頭。儘管這通常只是一個文體指南,而不是一個要求,但我認爲kv語言有時會依賴於它,所以如果不這樣做,您可能會遇到崩潰或奇怪的行爲。

+0

感謝您的解決方案和提示! – Kartopukus