我正在做一个项目,正在设计设置屏幕。 我想多次使用它,所以我创建了一个带有变量(例如 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
类和类实例之间是有区别的。将类视为创建对象的配方。在您共享的代码中,您没有创建对象。
查看 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