Python 访问kivy中不同模块中声明的信息的问题
我有一个python文件(root.py)和另一个python文件(button.py)。当我使用kv语言在button.py中定义一个带有属性的按钮(如size\u hint:0.1,1)时,root.py似乎无法访问该信息 当我在button.py中使用python定义相同的信息时,root.py似乎能够访问它 ROOT.PYPython 访问kivy中不同模块中声明的信息的问题,python,kivy,Python,Kivy,我有一个python文件(root.py)和另一个python文件(button.py)。当我使用kv语言在button.py中定义一个带有属性的按钮(如size\u 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.lan
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()
从kivy.app导入应用
从kivy.uix.floatlayout导入floatlayout
从kivy.lang.builder导入生成器
从按钮导入*
生成器。加载\u字符串(“”)
:
按钮栏:
""")
BtnBar类(按钮BAR):
打印(self.size_hint)#打印[1,1]而不是[0.1,1]
类根(浮动布局):
通过
类AppDev(应用程序):
def生成(自):
返回根()
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
从kivy.uix.floatlayout导入floatlayout
从kivy.lang.builder导入生成器
生成器。加载\u字符串(“”)
:
大小提示:0.1,1
""")
类按钮栏(浮动布局):
通过
Root.py应该能够访问我在button.py的Builder.load\u string中声明的任何信息。实例化对象后,将可以访问正确的数据。您可以使用时钟来确保在实例化后得到它。
此外,在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()
从kivy.app导入应用
从kivy.uix.floatlayout导入floatlayout
从kivy.lang.builder导入生成器
从kivy.clock导入时钟
从按钮导入*
生成器。加载\u字符串(“”)
:
BtnBar:#已更正为BtnBar
""")
BtnBar类(按钮BAR):
定义初始(自我,**kwargs):
超级(BtnBar,自我)。\uuuuu初始值(**kwargs)
时钟。计划一次(自我获取数据)
def get_数据(自身,dt):
打印(自我尺寸提示)#在第二帧上打印
类根(浮动布局):
通过
类AppDev(应用程序):
def生成(自):
返回根()
AppDev().run()
实例化对象后,可以访问正确的数据。您可以使用时钟来确保在实例化后得到它。此外,在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()
从kivy.app导入应用
从kivy.uix.floatlayout导入floatlayout
从kivy.lang.builder导入生成器
从kivy.clock导入时钟
从按钮导入*
生成器。加载\u字符串(“”)
:
BtnBar:#已更正为BtnBar
""")
BtnBar类(按钮BAR):
定义初始(自我,**kwargs):
超级(BtnBar,自我)。\uuuuu初始值(**kwargs)
时钟。计划一次(自我获取数据)
def get_数据(自身,dt):
打印(自我尺寸提示)#在第二帧上打印
类根(浮动布局):
通过
类AppDev(应用程序):
def生成(自):
返回根()
AppDev().run()
非常感谢!如果您可以回答另一个问题,我如何从button.py中的root.py访问信息。例如,我想从Root.py访问Root.size。我尝试了“从根导入*”,但返回了错误。我还试着从ButtonBar访问“self.parent.size”,但实际上,我应用了你在答案中所说的,self.parent成功了!我将时钟安排在实例化后的下一帧。@moo5e好极了。:)非常感谢你!如果您可以回答另一个问题,我如何从button.py中的root.py访问信息。例如,我想从Root.py访问Root.size。我尝试了“从根导入*”,但返回了错误。我还试着从ButtonBar访问“self.parent.size”,但实际上,我应用了你在答案中所说的,self.parent成功了!我将时钟安排在实例化后的下一帧。@moo5e好极了。:)