如何使用 kivy 文件中创建的类在 kivy 文件中设置变量

问题描述 投票:0回答:1

我正在做一个项目,正在设计设置屏幕。 我想多次使用它,所以我创建了一个带有变量(例如 content_cls)的类 我的问题是如何使用 Kivy 文件中创建的类设置此变量

main.py

from kivymd.app import MDApp
from kivymd.uix.screenmanager import MDScreenManager
from kivymd.uix.card import MDCard

from kivy.proeprties import ObjectProperty , StringProperty
from kivy.lang import Builder

Builder.load_file("mainfiles\\kivymd2.kv")
class Setting_card(MDCard):
    right_text = StringProeprty("")
    content_cls = ObjectProperty()

class WidgetsManager(MDScreenManager):
     pass

class MainApp(MDApp):
     def build(self):
         return WidgetsManager()
    def on_start(self):
        Setting_card.add_widget(Setting_card.content_cls)

if __name__ == "__main__":
     MainApp().run()

kivymd2.kv

<Nav_drawer_header@MDLabel>:
    size_hint : None , None
    adaptive_size : True
    font_style : "H5"
    theme_text_color : "Primary"
    font_name : "mainfiles\\B-NAZANIN.ttf"

<Setting_card>:
    _no_ripple_behavior : True
    size_hint : None , None
    adaptive_height : True
    radius : dp(20) , dp(20) , dp(20) , dp(20)
    md_bg_color : "lightgrey"
    width : self.parent.width


    MDLabel:
        bold : True
        font_size : 35
        text : app.farsi_font(root.right_text)
        size_hint : None, None
        adaptive_size : True
        pos_hint : {"center_y" : .5  , "right" : .9}
        font_name : "mainfiles\\B-NAZANIN.ttf"

<WidgetManager>:
    
    MDScreen:
        name : "setting screen"


        FitImage:
            size_hint : 1 , .9
            source : "images\\download (8).jpg"
            pos_hint : {"top" : .9}


        MDScrollView:
            do_scroll_x : False
            do_scroll_y : True
            id : setting_scroll
            width : root.width
            height : root.height/10*9


            MDGridLayout:
                size_hint : None , None
                adaptive_height : True
                width : self.parent.width
                cols : 1


                Setting_card:
                    id : fast_setting
                    right_text : "شروع سریع"
                    content_cls : Nav_drawer_header

我尝试有一个干净的代码,因此我创建了该类,并且我除了调用 kivy 文件中的类并将其放入 content_*cls 中,但当我这样做时,它说 Nav_*drawer_header 未定义

请注意,我为 Nav_drawer_header 做了一个示例,我永远不会将其用作内容_cls

python kivy kivy-language kivymd
1个回答
0
投票

类和类实例之间是有区别的。将类视为创建对象的配方。在您共享的代码中,您没有创建对象。

查看 on_start() 方法:

    def on_start(self):
        sc = Setting_card() # instance the class
        sc.content_cls = Nav_drawer_header() # instance and assign
        ...

更重要的是,我不确定您想要实现什么目标,或者 content_cls 的作用是什么。如果您希望每个设置卡都包含一个 NavDrawerHeader,您可以在 kv 中完成这一切:

Setting_card:
    id : fast_setting
    right_text : "شروع سریع"
    content_cls : ndh  # using id
    Nav_drawer_header: # instance added to Setting Card instance
        id: ndh  # id used to set content_cls
© www.soinside.com 2019 - 2024. All rights reserved.