2016-12-28 12 views
0

Как удалить добавленный виджет из этого виджета. я что-то понимаю? надеюсь, да, hehehe ...Как удалить добавленный виджет внутри этого виджета?

в любом случае простой код состоит только из кнопок и этикеток. Моя цель - если я нажму кнопку «Добавить», то отобразит виджет, который является меткой &. Если я хочу удалить виджет, я просто нажму кнопку закрытия в этом виджете.

но его не закрывать, его уже два дня, и я не могу найти, что проблема, и ее не дает мне никакой ошибки.

Спасибо, ребята.

from kivy.uix.floatlayout import FloatLayout 
from kivy.uix.widget import Widget 
from kivy.app import App 
from kivy.uix.screenmanager import ScreenManager, Screen 
from kivy.lang import Builder 

kv_file = Builder.load_string(''' 
<Screen1>: 
    BoxLayout: 
     Button: 
      on_release: root.add_button(True) 
      text: 'ADD' 
      size_hint: .2,.2 

<Layout1>: 
    BoxLayout: 
     pos: self.x,300 
     size_hint: .5,.3 
     Label: 
      text: 'THIS IS A ADDED WIDGET' 
     Button: 
      text: 'Close' 
      on_release: root.closeBTN() 
    ''') 

class Layout1(FloatLayout): 
    def closeBTN(self): 
     AddWidget_Layout1().addEmps(True) 

class AddWidget_Layout1(Widget): 
    def __init__(self, **kwargs): 
     super(AddWidget_Layout1,self).__init__(**kwargs) 
     self.count = 0 
     self.layout1 = Layout1() 

    def addEmps(self,xadd): 
     if xadd == 1: 
      self.add_widget(self.layout1) 
     elif xadd == True: 
      self.remove_widget(self.layout1) 


class Screen1(Screen,AddWidget_Layout1): 
    def add_button(self,*args): 
     self.count += 1 
     print 
     if self.count == 1: 
      self.addEmps(1) 

class projectApps(App): 
    def build(self): 
     return SM 

SM = ScreenManager() 
SM.add_widget(Screen1()) 

if __name__ == "__main__": 
    projectApps().run() 

ответ

0

У вас есть несколько ошибок в коде, во-первых, вы тестируете XADD для 1 и Истинного, который является своего рода то же самое:

def addEmps(self,xadd): 
    if xadd: 
     self.add_widget(self.layout1) 
    else: #was elif xadd == True which cannot happen... 
     self.remove_widget(self.layout1) 

Я также хотел бы изменить:

def closeBTN(self): 
    #AddWidget_Layout1().addEmps(True) #BAD! will create a new instance 
    self.parent.addEmps(False) # this looks better 

Наконец, я не уверен, почему вы делаете это, так как вы уже используете ScreenManager, так что вы можете просто переключиться на другой экран, когда вам нужно, а не делать t его странное удаление виджетов вещь ...

Я надеюсь, что это очищает большинство вопросов

+0

Идея заключается в том, что вместо того, чтобы создать еще один экран за ФОРМ, плохо просто создать виджет ФОРМ. , но дело в том, что если переменная xadd имеет значение True, виджет не удаляется. Если это где показать ошибку/ошибку, я могу найти решение. но нет ошибок. – azura

+0

@azura - Посмотрите на мой anwser, 1 и True - то же самое на python, используя False, чтобы удалить макет ... –

+0

отлично работает, это то, что мне нужно, сладкий .... раньше, я изменил True на Ложно, но это не сработало. я не заметил self.parent, мне нужно проверить документ python относительно self.parent .. im просто блуждающий, как может python знать функцию addEmps, расположенную на? в котором класс/родитель. плохо определенно нужно проверить документацию python ... отлично !! Благодарю Йоава! – azura

 Смежные вопросы

  • Нет связанных вопросов^_^