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

Python 如何在kivy中将参数传递给build()?,python,kivy,Python,Kivy,我已经用GridLayout编写了一段代码,需要在Python文件中添加按钮。因此,add_widget()维护操作应该在build()中完成。我遇到错误,无法获取。请有人帮助我 简而言之,我需要在MineApp类的build()中添加它,而不是添加_btn()。 提前谢谢` main.py from kivy.app import App from kivy.uix.gridlayout import GridLayout from kivy.uix.widget import Widget

我已经用GridLayout编写了一段代码,需要在Python文件中添加按钮。因此,add_widget()维护操作应该在build()中完成。我遇到错误,无法获取。请有人帮助我

简而言之,我需要在MineApp类的build()中添加它,而不是添加_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
:
方向:'垂直'
盒子布局:
方向:'水平'
高度:“30px”
尺寸提示:无
文本输入:
id:tinput
正文:“10”
按钮:
文本:“开始”
按:root.add\u btn(网格)
标签:
id:mylabel
文本:“0”
网格布局:
id:网格
科尔斯:10
行:10

这花了一些时间,但我想我明白你的意思了!通过在.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”指的是小部件!)这是您想要的吗?让我知道!我自己试过,没有问题:)

此外,这里没有明确指出,要测试代码,您需要通过以下方式导入生成器:

from kivy.lang import Builder
并且做

Builder.load_file("mine.kv") 

由于您的.py和.kv不共享相同的名称(如果它们确实匹配名称,您仍然需要在.kv中添加一个“#File name:main.py”!除此之外,它看起来不错!

这花了一些时间,但我想我明白了您的意思!您可以通过在.py文件中传递Grid参数来获得相同的效果,如下所示

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”指的是小部件!)这就是您的想法吗?让我知道!我自己试过了,运行起来没有问题:)

此外,这里没有明确指出,要测试代码,您需要通过以下方式导入生成器:

from kivy.lang import Builder
并且做

Builder.load_file("mine.kv") 

由于您的.py和.kv不共享相同的名称(如果它们确实匹配名称,您仍然需要将“#File name:main.py”添加到.kv!除此之外,它看起来很好!

您的代码工作得很好,但发生的情况是,只有在我单击“开始”按钮时才添加按钮。否则,如果它存在于build()中创建活动时,按钮将自动创建,而不是等待按钮按下。有什么想法吗?谢谢您的代码工作得很好,但是发生的事情是,只有在单击“开始”按钮时,按钮才会添加。否则,如果build()中有按钮按钮将在活动创建时自动创建,而不是等待按钮按下。有什么想法吗?谢谢