Kivy: Почему «self.id» равен None? [Дубликат]

Попробуйте следующее:

pd.set_option('display.expand_frame_repr', False)

Из документации:

display.expand_frame_repr: boolean

Вывести распечатку полного представления DataFrame для широких DataFrames в нескольких строках, max_columns по-прежнему соблюдается, но вывод будет охватывать несколько «страниц», если его ширина превышает display.width. [default: True] [в настоящее время: True]

blockquote>

См .: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.set_option.html

2
задан NumesSanguis 26 July 2015 в 16:43
поделиться

1 ответ

Как вы можете прочитать в документации :

В дереве виджетов часто возникает необходимость доступа / ссылки на другие виджеты. Язык Kv предоставляет способ сделать это с помощью id. Подумайте о них как о переменных уровня класса, которые могут быть использованы только на языке Kv.

Атрибуты id из кода Python описаны здесь здесь . Рабочий пример:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
from kivy.properties import ObjectProperty
from kivy.uix.button import Button

Builder.load_string("""
<Terminator>:
    id: masta
    orientation: 'vertical'

    MyButton:
        id: deleto

        button_id: deleto

        text: "Delete"
        on_release: masta.DelButton()

    MyButton
    MyButton
""")

class MyButton(Button):
    button_id = ObjectProperty(None)

class Terminator(BoxLayout):
    def DelButton(self):
        for child in self.children:
            print(child.button_id)       

class TestApp(App):
    def build(self):
        return Terminator()    

if __name__ == '__main__':
    TestApp().run()

Чтобы не удалять кнопку с меткой «Удалить», вы можете проверить ее свойство text. Hovewer, удаляющийся из цикла, приведет к ошибкам, так как некоторые из них будут пропущены после того, как список, который вы повторяете, изменится:

class Terminator(BoxLayout):
    def DelButton(self):
        for child in self.children:            
            self.remove_widget(child) # this will leave one child

Вам нужно создать список детей для удаления:

class Terminator(BoxLayout):
    def DelButton(self):
        for child in [child for child in self.children]:            
            self.remove_widget(child) # this will delete all children

В вашем случае:

class Terminator(BoxLayout):
    def DelButton(self):
        for child in [child for child in self.children if child.text != "Delete"]:            
            self.remove_widget(child)
2
ответ дан Nykakin 27 August 2018 в 05:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: