Kivy - 在代码中切换 TabbedPanelItems

Kivy - Switch between TabbedPanelItems in code

我在代码中切换 TabbedPanelItems 时遇到了一个小问题。

问题

我有几个选项卡,其中一个用于设置一些参数,select 用于加载一个文件。这些参数会影响其他选项卡如何向用户呈现某些数据。因此,我想在用户切换选项卡之前检查设置(例如,检查文件是否为 selected)。 我目前的解决方案是让用户切换选项卡,如果出现问题,我会通过弹出窗口通知用户并切换回设置选项卡。但是切换回来的时候,TabbedPanelItem的内容不是设置选项卡相关的内容。

这是我当前代码的一个片段:

#:kivy 1.10.1

<MyScreen>:
    orientation: 'vertical'
    spacing: '6dp'

    tabbed_panel: TP_inspect_screen
    settings_tab: TPI_settings_tab

    TabbedPanel:
        id: TP_inspect_screen
        default_tab: TPI_settings_tab
        on_current_tab: root.onTabChange(self.current_tab)
        TabbedPanelItem:
            id: TPI_settings_tab
            text: 'Settings'
            Label:
                text: 'Settings'

        TabbedPanelItem:
            text: 'Table'
            Button:
                text: 'HELLO'

        TabbedPanelItem:
            text: 'Plot'

class MyScreen(BoxLayout):
    
    settings_tab = ObjectProperty(None)
    tabbed_panel = ObjectProperty(None)

    def onTabChange(self, tab):

        if tab.text == 'Table':
            self.tabbed_panel.switch_to(self.tabbed_panel.default_tab)
            #self.tabbed_panel.switch_to(self.settings_tab)

在上面的示例中,我省略了上述检查。 发生的情况是,当我切换(通过单击)到 'Plot' 选项卡时,我看到一个空白屏幕,当我切换回 'Settings' 选项卡时,我看到了预期的标签。 当我尝试切换到 'Table' 选项卡时,我立即返回到 'Settings' 选项卡,但选项卡的内容是 'Table' 选项卡的按钮:

最好的,朱尔兹

问题是切换到默认标签太快了。

解决方案

使用Kivy Clock schedule_once()功能切换到默认选项卡。在片段中,我们使用 0.1 秒来显示慢动作的切换。您可以将其更改为 0 秒。

片段 - py

from kivy.clock import Clock


class MyScreen(BoxLayout):

    settings_tab = ObjectProperty(None)
    tabbed_panel = ObjectProperty(None)

    def onTabChange(self, tab):
        if tab.text == 'Table':
            Clock.schedule_once(lambda dt: self.tabbed_panel.switch_to(self.tabbed_panel.default_tab), 0.1)