Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 访问kivy中不同模块中声明的信息的问题_Python_Kivy - Fatal编程技术网

Python 访问kivy中不同模块中声明的信息的问题

Python 访问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

我有一个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.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好极了。:)