我正在尝试使用kivy GUI在python中创建一个购物清单程序,并且按钮被点击我希望它将自定义floatlayout添加到boxlayout。 floatlayout有一个复选框和一个标签。我一直得到这个错误致命的Python错误:( pygame降落伞)分段错误 虽然我在这里运行它已经中止了我的.py文件:
200 = 8*25
这是我的.kv文件:
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.checkbox import CheckBox
from kivy.uix.relativelayout import RelativeLayout
from kivy.uix.floatlayout import FloatLayout
class All(BoxLayout):
def addIngredient(self):
ing = Ingredient(name = self.ids.textInput.text)
self.ids.list.add_widget(ListItem(ing))
self.ids.button.text = 'done'
class ListItem(FloatLayout):
def __init__(self, ing):
self.ing = ing
class Ingredient():
def __init__(self, name):
self.name = name
class ListApp(App):
def build(self):
return All()
if __name__ == "__main__":
ListApp().run()
错误总是发生在这一行:
<All>:
orientation: 'vertical'
BoxLayout:
orientation: 'horizontal'
TextInput:
id: textInput
Button:
text: 'Add'
on_press: root.addIngredient()
id: button
BoxLayout:
orientation: 'vertical'
id: list
<ListItem>:
CheckBox:
size_hint: 0.2, 1
Label:
size_hint: 0.35, 1
text: ing.name
halign: 'left'
valign: 'middle'
答案 0 :(得分:1)
class ListItem(FloatLayout):
def __init__(self, ing):
self.ing = ing
我的猜测是你的问题来自覆盖ListItem的__init__
,而不是调用超类__init__
;这是通常会设置窗口小部件内部的位置,因此您最终会得到一个不正确实例化的窗口小部件,当您尝试将其添加到某些内容时会导致问题。
要修复它,请使用普通的python方法调用超类方法:
class ListItem(FloatLayout):
def __init__(self, ing):
super(ListItem, self).__init__()
self.ing = ing
令人遗憾的是,它让pygame只是段错误。也许使用SDL2后端你会得到更多的帮助错误。无论如何你应该尝试使用kivy 1.9和SDL2。