我已经用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
答案 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”!除此之外,它看起来不错!