我有两个名为"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方法。