Не вижу родителей детей от одного ребенка KIVY - PullRequest
0 голосов
/ 11 июня 2019

Я хочу обновить переменную из LogViewScreen с помощью DeployScreen.Каждый класс является вкладкой / дочерним элементом в моей NucleusPanel, которая наследует TabbedPanel.Я замечаю, что когда я перебираю дочерние элементы родительского класса (NucleusPanel), я вижу только тот дочерний элемент, для которого я в данный момент использую перебор дочерних элементов.Как я могу получить доступ ко всем дочерним элементам моего родителя из любой вкладки?

class DeployScreen(RelativeLayout):
    def __init__(self, **kwargs):
        super(DeployScreen, self).__init__(**kwargs)
        ....
    def getTaskList(self, event, tasklist):
        for c in self.parent.children:
            print(c)
        # update LogViewScreen button text
        self.parent.ids.LogViewTab.selected_tasklist = tasklist
        ....


class LogViewScreen(RelativeLayout):
    selected_tasklist = StringProperty(" ")
    def __init__(self, **kwargs):
        super(LogViewScreen, self).__init__(**kwargs)
        # defaults
        self.canvas.clear()

        self.ViewingIndicatorBox = Button(
            text=self.selected_tasklist,
            size_hint=(1,None),
            size=(self.size),
            )

        self.ViewingIndicatorBox.disabled = True
        self.add_widget(self.ViewingIndicatorBox)
        return(None)

    pass

class NucleusPanel(TabbedPanel):
    def __init__(self, **kwargs):
        super(NucleusPanel, self).__init__(**kwargs)
        self.tab_pos = "top_left"
        self.tab_width = 265

        self.default_tab_text = "Deploy"
        self.default_tab.id ='DeployTab'
        self.default_tab_content = DeployScreen()

        self.lv_tab = TabbedPanelHeader(text='Log Viewer')
        self.lv_tab.id = 'LogViewTab'
        self.add_widget(self.lv_tab)
        self.lv_tab.content = LogViewScreen()

   pass


class NucleusApp(App):
    def build(self):
        return(NucleusPanel())

Я ожидаю, что смогу видеть всех детей в NucleusPanel из DeployScreen, но я вижу только DeployScreen:

<__main__.DeployScreen object at 0x000002262937DCE0>

Ответы [ 2 ]

0 голосов
/ 11 июня 2019

Чтобы обновить мой виджет PreviewIndicatorBox в моем LogViewScreen из DeployScreen, я просто создаю и идентифицирую для этой кнопки и, используя полученную помощь, могу перебирать содержимое каждой вкладки и прикреплять поиск к дочернему элементу Button. с соответствующим идентификатором. Вот как я это сделал.

class DeployScreen(RelativeLayout):
    def __init__(self, **kwargs):
        super(DeployScreen, self).__init__(**kwargs)
        ....
    def getTaskList(self, event, tasklist):
        for c in NucleusApp.get_running_app().root.tab_list:
            if 'LogView' in str(c.content):
                for child in c.content.children:
                    if isinstance(child, Button) and child.id == 'VIB':
                        child.text = tasklist
                        ....

class LogViewScreen(RelativeLayout):
    selected_tasklist = StringProperty(" ")
    def __init__(self, **kwargs):
        super(LogViewScreen, self).__init__(**kwargs)
        # defaults
        self.canvas.clear()

        self.ViewingIndicatorBox = Button(
            id='VIB',
            text='Current running log - {}'.format(self.selected_tasklist),
            size_hint=(1,None),
            size=(self.size),
            background_normal='',
            background_color=[0.18, 0.18, 0.31, 1],
            pos_hint={'top':1},
            height=50
            )
0 голосов
/ 11 июня 2019

Вы можете увидеть все вкладки, просматривая tab_list, используя:

    for c in App.get_running_app().root.tab_list:
        print(c.content)

Вы можете использовать это где угодно в App.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...