【问题标题】:Kivy Add Widget ErrorKivy 添加小部件错误
【发布时间】:2014-03-12 20:17:50
【问题描述】:

我的问题是,当我想运行上面的示例时,它不起作用。 发生的情况是,弹出窗口出现一次,带有文本“test”,然后当我再次单击该按钮时,它会显示错误:

File "/home/river/android-sdk/workplace/python-forandroid/build/pythoninstall/lib/python2.7/site-packages/kivy/uix/layout.py", line 76, in add_widget
File "/home/river/android-sdk/workplace/python-for-android/build/python-install/lib/python2.7/site-packages/kivy/uix/widget.py", line 314, in add_widget
kivy.uix.widget.WidgetException: Cannot add <kivy.uix.boxlayout.BoxLayout object at 0x60a25a78>, it already has a parent <kivy.uix.boxlayout.BoxLayout object at 0x60e2bae8>

我认为原因是每次点击后我都必须删除小部件。 (我不知道怎么做)

 import kivy
 import kivy.uix.label
 import kivy.app
 import kivy.lang.builder
 textshow = BoxLayout()
 def answer(answer):
      text = Label(text=str(answer))
      textshow.add_widget(text)
 Builder.load_string('''
 <main>:
     Button: 
         on_release: root.show()
 ''')
 class main(BoxLayout):
      def show(self):
           answer("test")
           popup = Popup(content=textshow)
           popup.open()
 class apprun(App):
     def build(self):
         return main()
 apprun().run()

如果你回答这个问题,请显示整个代码。

编辑:这是一个示例脚本,我的真实脚本有 2 个类 Screen1,并且 textshow = BoxLayout() 类

Inclements 答案有效,但每次单击按钮都会产生另一个文本显示!请帮忙!

【问题讨论】:

    标签: android python kivy


    【解决方案1】:

    一个简单的答案是存储弹出窗口并每次都简单地使用 smae。例如,您可以将self.popup = Popup(content=textshow) 放入您的build 方法中,然后将您的show 方法更改为App.get_running_app().popup.open()。这将始终打开单个保存的弹出窗口,避免出现问题。

    【讨论】:

    • 这个方法还会使用functions参数(答案)吗?或者你可以给我看即兴创作的剧本吗?
    • 没关系,我让它工作了,但是现在,这很有趣,每次单击按钮时它都会增加 1 个文本显示!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    • 2014-09-02
    • 1970-01-01
    相关资源
    最近更新 更多