【问题标题】:KivyMD Tab name containing icons and text包含图标和文本的 KivyMD 选项卡名称
【发布时间】:2021-01-13 08:28:39
【问题描述】:

我正在使用 KivyMD,我正在尝试创建一个包含图标和文本的选项卡名称 - 但它无法在我的屏幕上正确显示。

我正在尝试让一个选项卡包含以下文本:[A] Tab1(其中 [A] 是图标)。 如果单独调用该图标,它会显示正常(请参见下面屏幕截图中的第二个选项卡)。但是当它与文本结合时,它不会显示出来(它会显示一个带有 X 的框,就像它是一个无法识别的字符一样)。

https://kivymd.readthedocs.io/en/latest/components/tabs/ 中的示例通过 python 加载选项卡,但我想从 .kv 文件中执行此操作,但显然我的语法不正确,我无法弄清楚如何应用正在发生的事情在这些示例中完成。

这是我尝试显示它的不同方式的代码。为简单起见,我将所有代码都放在一个地方,但实际上 KV 组件位于单独的 .kv 文件中。

from kivy.lang import Builder
from kivymd.app import MDApp
from kivymd.uix.tab import MDTabsBase
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmanager import Screen

KV = '''
#:import md_icons kivymd.icon_definitions.md_icons

BoxLayout:
    id: boxcad
    orientation: 'vertical'
    MDToolbar:
        id: toolcad
        title: "Mainscreen"
        md_bg_color: app.theme_cls.primary_color


    BoxLayout:
        id: tabox
        orientation: 'vertical'

        MDTabs:
            id: itemstab

            Tab:
                id: tab1
                name: 'tab1'
                text: "Tab1"

            Tab:
                id: tab2
                name: 'tab2'
                text: 'alpha-a-box'

            Tab:
                id: tab3
                name: 'tab3'
                text: md_icons.get('alpha-a-box')

            Tab:
                id: tab4
                name: 'tab4'
                text: 'alpha-a-box' + 'Tab4'

            Tab:
                id: tab5
                name: 'tab5'
                text: md_icons.get('alpha-a-box') + ' Tab5'

            Tab:
                id: tab6
                name: 'tab6'
                text: md_icons['alpha-a-box'] + ' Tab6'
'''


class MainScreen(Screen):
    pass


class Tab(BoxLayout, MDTabsBase):
    """Class implementing content for a tab."""
    pass


class ExampleApp(MDApp):
    def build(self):
        return Builder.load_string(KV)


ExampleApp().run()

还有我在屏幕上看到的屏幕截图:

感谢您的帮助

【问题讨论】:

    标签: kivymd


    【解决方案1】:

    我已经设法解决了 - 如果你遇到和我一样的问题,我就是这样做的。

    您可以在 .KV 文件中使用 f 字符串,因为它在 https://kivymd.readthedocs.io/en/latest/components/tabs/ 示例中显示。您还需要在 .KV 文件中导入 md_icons 和字体。

    这是我的最终代码,Tab 7 显示了我试图实现的输出。

    from kivy.lang import Builder
    
    from kivymd.app import MDApp
    
    from kivymd.uix.tab import MDTabsBase
    from kivy.uix.boxlayout import BoxLayout
    from kivy.uix.screenmanager import Screen
    
    KV = '''
    #:import md_icons kivymd.icon_definitions.md_icons
    #:import fonts kivymd.font_definitions.fonts
    
    BoxLayout:
        id: boxcad
        orientation: 'vertical'
        MDToolbar:
            id: toolcad
            title: "Mainscreen"
            md_bg_color: app.theme_cls.primary_color
    
    
        BoxLayout:
            id: tabox
            orientation: 'vertical'
    
            MDTabs:
                id: itemstab
    
                Tab:
                    id: tab1
                    name: 'tab1'
                    text: "Tab1"
    
                Tab:
                    id: tab2
                    name: 'tab2'
                    text: 'alpha-a-box'
    
                Tab:
                    id: tab3
                    name: 'tab3'
                    text: md_icons.get('alpha-a-box')
    
                Tab:
                    id: tab4
                    name: 'tab4'
                    text: 'alpha-a-box' + 'Tab4'
    
                Tab:
                    id: tab5
                    name: 'tab5'
                    text: md_icons.get('alpha-a-box') + ' Tab5'
    
                Tab:
                    id: tab6
                    name: 'tab6'
                    text: md_icons['alpha-a-box'] + ' Tab6'
                Tab:
                    id: tab7
                    name: 'tab7'
                    text: f"[size=50][font={fonts[-1]['fn_regular']}]{md_icons['alpha-a-box']}[/size][/font] Tab7"
    '''
    
    
    class MainScreen(Screen):
        pass
    
    
    class Tab(BoxLayout, MDTabsBase):
        """Class implementing content for a tab."""
        pass
    
    
    class ExampleApp(MDApp):
        def build(self):
            return Builder.load_string(KV)
    
    
    ExampleApp().run()
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多