有人知道如何将kivy脚本中定义的参数传递给类吗



我有两个名为"test_1.py";以及";小工具1.py";。第一个是主应用程序,它使用在第二个脚本中创建的标准小部件来绘制主应用程序。我缺少了一些东西,因为我希望得到一个绿色背景(admin="user"(,但我没有。

我看起来MyLabel是用kivy默认值创建的,后来更改了它的值;test_1.py";。

有人知道从kivy语言启动小部件时传递admin属性的正确方法吗?

PS。这是一个简化的例子,无论是否为管理员,都用于更改背景之外的其他目的。

test_1.py:

import kivy
kivy.require('1.10.0')
import widgets_1 
from kivymd.app import MDApp
from kivymd.uix.screen import MDScreen
from kivymd.uix.boxlayout import MDBoxLayout
from kivy.lang import Builder
Builder.load_string("""
<MyBox>:
MyLabel:
admin: "user"
line_color: "blue"
line_width: 5
""")
class MyBox(MDBoxLayout):
pass
class MainApp(MDApp):
def build(self):
self.screen = MDScreen()
self.box = MyBox()
self.screen.add_widget(self.Box)
return self. Screen
if __name__ == "__main__":
app = MainApp()
app.run()

小工具_1.py:

import kivy
kivy.require('1.10.0')
from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.properties import StringProperty
from kivymd.uix.boxlayout import MDBoxLayout
class MyLabel(MDBoxLayout):
admin = StringProperty()
def __init__(self, **kwargs):
super().__init__(**kwargs)
print("admin", self.admin)
if self.admin == "user":
self.md_bg_color = "green"
else:
self.md_bg_color = "red"

谢谢!

每当admin属性发生更改时,都可以使用on_admin()方法来执行某些代码。尝试将MyLabel类重新定义为:

class MyLabel(MDBoxLayout):
admin = StringProperty()
def on_admin(self, instance, new_value):
print("admin", self.admin)
if self.admin == "user":
self.md_bg_color = (0,1,0,1)
else:
self.md_bg_color = (1,0,0,1)

或者,另一种方法是将逻辑放入kv:

<MyBox>:
MyLabel:
admin: "user"
line_color: "blue"
line_width: 5
md_bg_color: (0,1,0,1) if self.admin == 'user' else (1,0,0,1)

则不需要CCD_ 5方法。

最新更新