我的问题是,我需要基于可变数量的网格方块创建按钮网格,并将它们放置在网格布局上,并使用屏幕管理器将它们显示在屏幕上。我知道如何使用简单的 for 循环在纯 python 中执行此操作,但是我用 kivy 语言编写了程序的布局,并且我不知道如何将按钮添加到网格布局中,因为我不知道如何在 kv 文件中正确引用它们。相关的python代码是:
def buildMap():
index = 0
for index in range(0, numberOfGridBlocks):
mainMap.ids["Map"].add_widget(Button())
index = index + 1
buildMap()
kv 文件的相关部分是:
ScreenManagement:
MainMenuScreen:
NewGameMenuScreen:
JoinGameMenuScreen:
TutorialMenuScreen:
SettingsMenuScreen:
MapScreen:
<MenuButton>:
on_press: app.menuButtonPressed()
size_hint_y: .125
background_normal: "images/button.png"
background_down: "images/buttonPressed.png"
<Button>:
<BoxLayout>:
orientation: "vertical"
<MapLayout>:
<MapScreen>:
name: "mapScreen"
MapLayout:
id: "Map"
cols: 5
我希望这个例子能让你清楚:
test.kv:
#:kivy 1.9.0
ScreenManager:
MapScreen:
<MapScreen>:
name: 'map'
GridLayout:
id: grid
cols: 1
main.py:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from kivy.app import App
from kivy.uix.screenmanager import Screen
from kivy.uix.button import Button
from kivy.clock import mainthread
NUMBER_OF_BUTTONS = 5
class MapScreen(Screen):
@mainthread
def on_enter(self):
for i in xrange(NUMBER_OF_BUTTONS):
button = Button(text="B_" + str(i))
self.ids.grid.add_widget(button)
class Test(App):
pass
Test().run()
The @mainthead
需要装饰器来稍微延迟函数,因此首先扫描 kv 文件,使得ids
列出可行的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)