KivyMD:更改 MDLabel 的 font_name

Posted

技术标签:

【中文标题】KivyMD:更改 MDLabel 的 font_name【英文标题】:KivyMD: Change font_name of MDLabel 【发布时间】:2021-04-16 00:03:33 【问题描述】:

我想更改 MDLabel 的 font_name 属性。但我想在.py 文件中动态添加这个组件,而不是.kv

所以当我写这样的东西时:

main.py

from kivy.lang import Builder
from kivymd.app import MDApp
from kivymd.uix.label import MDLabel
from kivymd.uix.screen import MDScreen

class MainApp(MDApp):    
    def build(self):
        Builder.load_string(KV)
        otherLabel = MDLabel(
                text="one more text",
                halign="center",
                font_name="18328",
                font_size="50sp"
            )
        screen.add_widget(
            otherLabel
        )
        return screen

MainApp().run()

它没有帮助。如何实现字体动态应用?

KV 字符串

KV = '''
Screen:    
    MDCard:
        id: box
        orientation: "vertical"
        padding: "8dp"
        size_hint: None, None
        size: "280dp", "180dp"
        pos_hint: "center_x": .5, "center_y": .5
        
        MDLabel:
            text: "Hello"
            theme_text_color: "Secondary"
            size_hint_y: None
            height: self.texture_size[1]
            font_name: '18328.ttf'    

            
        MDSeparator:
            height: "1dp"
            
        MDLabel:
            text: "Body"
        
        MDLabel:
            text: "Hello"
            font_name: 'BebasNeue-Regular.otf'
            font_size: "50sp"
'''

【问题讨论】:

【参考方案1】:

在屏幕本身创建一个引用(你也不需要使用.ttf,库会自动添加它,只需不带扩展名的文件名即可)

class MyScreen(Screen):
    my_MD_Label = None

    def on_kv_post(self, instance):
        self.my_MD_Label = MDLabel(
            text="one more text"
            font_name="18328"
        )
        self.ids.box.add_widget(self.my_MD_Label)

只要你想改变它,你可以简单地这样做

self.my_MD_Label.font_name = "new_font"  # When in same screen
self.manager.get_screen('MyScreen').my_MD_Label.font_name = "new_font"  #When in other screen

【讨论】:

如果我有刚刚更新的代码,我在哪里可以初始化这个屏幕 初始化python文件中的屏幕,就像我展示的那样,在kv中使用<MyScreen>:而不是Screen:并在.kv中命名为'MyScreen',然后在构建中添加类 like this in kv <MyScreen>:, next line, name: 'MyScreen', 在python的build方法中,创建一个ScreenManager,然后给它添加一个MyScreen的实例,然后返回screenmanager,像这样sm = ScreenManager()``sm.add_widget(MyScreen())``return sm,这就是 build 中应该包含的所有代码 on_kv_post 什么时候应该起作用?我启动程序,但没有出现任何小部件 你能更新代码吗,你可能错过了什么,on_kv_post 在它创建后被触发

以上是关于KivyMD:更改 MDLabel 的 font_name的主要内容,如果未能解决你的问题,请参考以下文章

MDLabel 的 Adaptive_width 属性无法正常工作

我如何在 KivyMD 中制作多行标签?

如何在 KivyMD 中更改 FloatingActionButton 的大小?

更改 OneLineListItem MDList 的 font_name

在 Kivy 上双击时如何回调和打印 MDLabel 的文本?

如何使用 kivymd 中的函数更改列表项图标?