如何在kivy中将参数传递给build()?

时间:2016-06-10 10:00:16

标签: python kivy

我已经用GridLayout编写了一个代码,需要在Python文件中添加按钮。因此,add_widget()mainpulation应该在build()中完成。我收到错误,无法得到它。有人请帮助我。

简而言之,我需要在MineApp类的build()中使用它而不是add_btn()。  在此先感谢。

main.py

from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.properties import ObjectProperty
from kivy.uix.boxlayout import BoxLayout

class MainLayout(BoxLayout):
    def build(self):
        pass
    def add_btn(self,id):
        for i in range(100):
            id.add_widget(Button())
class MineApp(App):
    def build(self):
        return MainLayout()

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

mine.kv文件:

<MainLayout>:
    orientation:'vertical'
    BoxLayout:
        orientation:'horizontal'
        height: '30px'
        size_hint_y:None
        TextInput:
            id: tinput
            text:'10'
        Button:
            text:'start'
            on_press:root.add_btn(grid)
        Label:
            id:mylabel
            text:'0'
    GridLayout:
        id: grid
        cols:10
        rows:10

1 个答案:

答案 0 :(得分:0)

花了一些时间,但想想我得到了你想说的话!您可以通过在.py文件中传递Grid的id参数来获得相同的效果,如此...

class MainLayout(BoxLayout):
    def build(self):
        for i in range(100):
            self.ids.grid.add_widget(Button())

然后,你可以拿起你的开始按钮......

Button:
    text:'start'
    on_press:root.build()

这是因为.py中的“self”指的是类。而在.kv中类似的措辞是'root'(而.kv中的'self'指的是小部件!)这是你有什么样的心里?让我知道!我自己试了一下,并没有遇到任何问题:)

此外,此处未明确指出要测试您需要通过以下方式导入Builder的代码:

from kivy.lang import Builder

并且......

Builder.load_file("mine.kv") 

因为.py和.kv不共享相同的名称(如果匹配名称,你仍然需要在.kv中添加“#File name:main.py”!除此之外,它看起来不错!

相关问题