Kivy安卓实战 |Tab 的动态管理|寫個工具箱把4 - 图1
© Karobben

由於語法渲染問題而影響閱讀體驗, 請移步博客閱讀~
本文GitPage地址

  1. CryptoWatch-Kivy 1.13
  2. Kivy 2.0.0
  3. Kivy-Garden 0.1.4
  4. kivy-garden.wordcloud 1.0.0
  5. kivymd 0.104.2.dev0

Quick Review

  1. tree
  1. .
  2. ├── bin
  3. └── KarobbenTB-1.3-armeabi-v7a-debug.apk
  4. ├── buildozer.spec
  5. ├── favicon.ico
  6. ├── font
  7. ├── ArtificialBox-WdD4.ttf
  8. | ...
  9. └── JingDianFanJiaoZhuan-1.ttf
  10. ├── Layout
  11. ├── filechooser.kv
  12. ├── menu.kv
  13. ├── Navigation_Draw.kv
  14. ├── Navigation_Tabs.kv
  15. └── Seq.kv
  16. ├── lib
  17. └── bio_seq.py
  18. ├── libWidget
  19. ├── filechooser.py
  20. ├── main.py
  21. ├── menu.py
  22. └── Seq.py
  23. ├── logo.png
  24. └── main.py

Function for Close Tab

Navigation_Tabs.kv

Use on_ref_press method

  1. MDTabs:
  2. id: tabs
  3. text: "1"
  4. + on_ref_press: app.on_ref_press(*args)
  1. class MainApp(MDApp):
  2. + def on_ref_press(
  3. + self,
  4. + instance_tabs,
  5. + instance_tab_label,
  6. + instance_tab,
  7. + instance_tab_bar,
  8. + instance_carousel,
  9. + ):
  10. + '''
  11. + The method will be called when the ``on_ref_press`` event
  12. + occurs when you, for example, use markup text for tabs.
  13. + :param instance_tabs: <kivymd.uix.tab.MDTabs object>
  14. + :param instance_tab_label: <kivymd.uix.tab.MDTabsLabel object>
  15. + :param instance_tab: <__main__.Tab object>
  16. + :param instance_tab_bar: <kivymd.uix.tab.MDTabsBar object>
  17. + :param instance_carousel: <kivymd.uix.tab.MDTabsCarousel object>
  18. + '''
  19. +
  20. + # Removes a tab by clicking on the close icon on the left.
  21. + for instance_tab in instance_carousel.slides:
  22. + if instance_tab.text == instance_tab_label.text:
  23. + instance_tabs.remove_widget(instance_tab_label)
  24. + break

Connect Navigation to Tabs

Navigation_Draw.kv

  1. MDNavigationLayout:
  2. ScreenManager:
  3. Screen:
  4. BoxLayout:
  5. orientation: 'vertical'
  6. MDToolbar:
  7. id: nav_banner
  8. icon: "android"
  9. title: "Tool Box"
  10. elevation: 10
  11. left_action_items: [["", lambda x: nav_drawer.set_state("open")]]
  12. Widget:
  13. id: nav_widget
  14. MDNavigationDrawer:
  15. id: nav_drawer
  16. text: "I am here "
  17. BoxLayout:
  18. + id: nav_button
  19. MDLabel:
  20. text: "Add something here"

main.py

  1. class MainApp(MDApp):
  2. def build(self):
  3. + self.Widget_navi = Builder.load_string(OPEN("Layout/Navigation_Draw.kv"))
  4. + self.Widget_tabs = Builder.load_string(OPEN("Layout/Navigation_Tabs.kv"))
  5. + screen.add_widget(self.Widget_tabs)
  6. + screen.add_widget(self.Widget_navi)
  7. def on_start(self):
  8. from lib.bio_seq import Bio as FunBioSeq
  9. Fun = FunBioSeq()
  10. ...
  11. List = {"Seq":{'icon':"Characters",'title':"Sequencs Tools"}}
  12. + name_tab = "Bio"
  13. + Tab1 = Tab(
  14. + text=f"[ref={name_tab}][color=#fa937f][font=font/heydings-icons-1]{'X'}[/font][/color][/ref] {name_tab}")
  15. + '''
  16. + Navigation test
  17. + '''
  18. + Button_test = MDRectangleFlatButton(
  19. + text="篆体",
  20. + pos_hint={"center_x": 0.5, "center_y": 0.5},
  21. + font_name = "./font/JingDianFanJiaoZhuan-1.ttf",
  22. + on_release = self.run_test)
  23. + self.Widget_navi.ids.nav_button.add_widget(Button_test)
  24. + def run_test(self, *args):
  25. + self.add_tag()
  26. + self.Widget_navi.ids.nav_drawer.set_state("close")
  27. + print(iter(list(self.Widget_tabs.ids.tabs.get_tab_list())))#switch_tab("X 篆书")
  28. + def add_tag(self, *args):
  29. + name_tab = " 篆书"
  30. + Tag_title = f"[ref={name_tab}][font=font/heydings-icons-1][color=#fa937f]{'X'}[/color][/font][/ref][font=./font/JingDianFanJiaoZhuan-1]{name_tab}[/font]"
  31. + tmp_tab =Tab( text = Tag_title)
  32. + from libWidget.Seq import FunctionWidget
  33. + Fun = FunctionWidget()
  34. + screen_tmp = Screen()
  35. + screen_tmp.name = "Test"
  36. + screen_tmp.add_widget(Fun.main())
  37. + tmp_tab.add_widget(screen_tmp)
  38. + self.Widget_tabs.ids.tabs.add_widget(tmp_tab)
  39. + self.Widget_tabs.ids.tabs.switch_tab(Tag_title)

Result:

Kivy安卓实战 |Tab 的动态管理|寫個工具箱把4 - 图2
(C) Karobben

Enjoy~

本文由Python腳本GitHub/語雀自動更新

由於語法渲染問題而影響閱讀體驗, 請移步博客閱讀~
本文GitPage地址

GitHub: Karobben
Blog:Karobben
BiliBili:史上最不正經的生物狗