【问题标题】:Kivy GridLayout accessing rows and cols returns None.Kivy GridLayout 访问行和列返回无。
【发布时间】:2016-09-01 02:58:23
【问题描述】:

我有以下代码:

class MyGridLayout(GridLayout):
    def __init__(self, **kwargs):
        super(MyGridLayout, self).__init__(**kwargs)

class Board(Widget):

    my_layout = ObjectProperty(None)

    def __init__(self, **kwargs):
        super(Board, self).__init__(**kwargs)

    def on_my_layout(self, instance, value):
        print self.my_layout.cols

class MyApp(App):

    def build(self):
        return Board()

if __name__ == '__main__':
    MyApp().run()

这是我的 kv 文件:

<Board>:
    my_layout: my_layout
    MyGridLayout:
        id: my_layout
        cols: 10
        rows: 10

关于方法on_my_layout 我想打印我的MyGridLayout 实例有多少列。但是,它总是返回给我 None。如果我想访问行,它也返回 None 。为了访问MyGridLayout 的行和列的正确值,我必须对我的python 代码或我的kivy 语言进行哪些更改?它必须返回rows = 10cols = 10

【问题讨论】:

    标签: python kivy kivy-language


    【解决方案1】:
    <Board>:
        my_layout: my_layt ## This
        MyGridLayout:
            id: my_layt
            cols: 10
            rows: 10
    

    它不起作用,因为您将不存在的小部件分配给ObjectProperty,因此分配给YourObjectProperty.cols==None。你基本上需要这样做:

    <Board>:
        MyGridLayout:
            id: my_layt
            cols: 10
            rows: 10
        my_layout: my_layt ## This
    

    这将在 kv 中引发错误。但是,如果您在__init__() 中执行此操作,那么您的小部件已经在那里并且正在工作,它会毫无问题地打印它。 id 和 variable 不要使用相同的名称,否则可能根本不起作用。

    class Board(Widget):
    
        my_layout = ObjectProperty(None)
        def __init__(self, **kwargs):
            super(Board, self).__init__(**kwargs)
            self.my_layout = self.ids.my_layt
    

    【讨论】:

    • 谢谢,它解决了我的问题。你能告诉我为什么方法 on_my_layout__init__ 被首先调用吗?
    • @Caaarlos 不是方法,分配是第一位的。当您将 .py 中的 my_layout 更改为 ObjectProperty 时,将调用该方法,因此当您在 .kv 中为其分配某些内容时,它将运行您的 on_my_layout 并打印一些内容。这就是为什么您需要等到小部件初始化,然后将一个已初始化(存在)的小部件分配给一个变量,该变量将调用您的函数。我的回答中的第一个代码:my_layout: my_layt 时没有小部件。
    • 谢谢,现在我知道我的代码发生了什么!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-29
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多