2014-03-12 3 views
1

내 문제는 위의 예제를 실행하려고 할 때 작동하지 않는다는 것입니다. 입니다 무슨 일이 팝업 텍스트 "테스트"한 번 나타나 나는 다시 버튼을 클릭 할 때이 오류를 보여줍니다Kivy 위젯 오류 추가

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() 

(나는 방법을 잘 모릅니다).

편집 :이 샘플 스크립트입니다, 내 진짜 스크립트는이 클래스 화면 1을 가지고 있으며, textshow = BoxLayout에서는() 클래스

Inclements 대답했다,하지만 버튼을 클릭 할 때마다 다른 textshow하게! 도와주세요!

답변

2

간단한 대답은 팝업을 저장하고 매번 smae를 사용하는 것입니다. 예를 들어 build 메서드에 self.popup = Popup(content=textshow)을 입력하고 show 메서드를 App.get_running_app().popup.open()으로 변경하면됩니다. 이렇게하면 문제가 발생하지 않도록 항상 저장된 단일 팝업이 열립니다.

+0

이 방법은 여전히 ​​함수 매개 변수 (대답)를 사용합니까? 즉흥적으로 스크립트를 보여줄 수 있습니까? – Kogan007

+0

신경 쓰지 마라, 나는 일하도록했다. 그러나 지금, 그리고 이것은 들썩 들썩하다. 버튼을 클릭 할 때마다 1 개의 텍스트 쇼를 추가하고있다. – Kogan007

+0

여전히 여러 textshows에 대한 답변이 필요합니다. – Kogan007