我有一个python文件(root.py)和另一个python文件(button.py)。当我使用kv语言在button.py中定义具有属性(例如size_hint:0.1,1)的按钮时,root.py似乎无法访问该信息。
当我在button.py中使用python定义相同的信息时,root.py似乎能够访问它。
ROOT.PY
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.lang.builder import Builder
from buttons import *
Builder.load_string("""
<Root>:
ButtonBar:
""")
class BtnBar(ButtonBar):
print(self.size_hint) # prints [1,1] instead of [0.1,1]
class Root(FloatLayout):
pass
class AppDev(App):
def build(self):
return Root()
BUTTON.PY
from kivy.uix.floatlayout import FloatLayout
from kivy.lang.builder import Builder
Builder.load_string("""
<ButtonBar>:
size_hint: 0.1,1
""")
class ButtonBar(FloatLayout):
pass
Root.py应该能够访问我在button.py的Builder.load_string中声明的任何信息
答案 0 :(得分:0)
实例化对象后,将可以访问正确的数据。您可以使用时钟来确保实例化后得到它。
同样在您的kv字符串中,您可能希望使用BtnBar
而不是ButtonBar
这是您的root.py重写后执行的操作。
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.lang.builder import Builder
from kivy.clock import Clock
from buttons import *
Builder.load_string("""
<Root>:
BtnBar: # corrected to BtnBar
""")
class BtnBar(ButtonBar):
def __init__(self, **kwargs):
super(BtnBar, self).__init__(**kwargs)
Clock.schedule_once(self.get_data)
def get_data(self, dt):
print(self.size_hint) # prints on second frame
class Root(FloatLayout):
pass
class AppDev(App):
def build(self):
return Root()
AppDev().run()