0

我有以下代码:

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 。我必须对我的 python 代码或我的 kivy 语言进行哪些更改才能访问MyGridLayout行和列的正确值?它必须返回rows = 10cols = 10

4

1 回答 1

0
<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
于 2016-05-06T07:32:53.410 回答