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)
我在代码中切换 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)