如何解决在python中动态添加.kv childwidgets
我正在尝试在python的另一个(网格)布局小部件中动态添加标签(在本例中为LightL和DarkL)。
我尝试使用ID,但是我不确定如何使用add_widget实现它。 子标签具有背景色(矩形),我希望所有新创建的标签都具有相同的格式。
from kivy.lang import Builder
from kivy.properties import NumericProperty
from kivy.uix.screenmanager import Screen
from kivy.app import App
import kivy
kv = Builder.load_string("""
<BackgroundColor@Widget>
background_color: 1,1,1
canvas.before:
Color:
rgba: root.background_color
Rectangle:
size: self.size
pos: self.pos
<LightL@Label+BackgroundColor>
background_color: 0.15,0.15,1
size_hint_x: 0.0725
<DarkL@Label+BackgroundColor>
background_color: 0.1,0.1,1
<IndexScreen>:
BoxLayout:
id: DynBox
GridLayout:
cols: 4
LightL:
id: LightLid
text: ""
DarkL:
id: DarkLid
text: ""
BoxLayout:
orientation: 'vertical'
Label:
text:'topright'
Label:
text:'bottomright'
""")
class IndexScreen(Screen):
pass
class MainApp(App):
xn = NumericProperty()
def build(self):
self.root = kv
self.AddLabel()
return self.root
def AddLabel(self,*arg):
for xn in range(0,8):
App.DarkLid.add_widget(Builder.load_string('''
Label:
text:
'#D: {}'.format(self.xn)
'''))
App.LightLid.add_widget(Builder.load_string('''
Label:
text:
'#L: {}'.format(self.xn)
'''))
return
if __name__ == "__main__":
MainApp().run
解决方法
我认为问题在于您对kv
和LightL
的{{1}}定义。如果您像这样简化这些定义,它将起作用:
DarkL
然后,修改您的<LightL@Label>:
background_color: 0.15,0.15,1
canvas.before:
Color:
rgba: root.background_color
Rectangle:
size: self.size
pos: self.pos
<DarkL@Label>:
background_color: 0.1,0.1,1
canvas.before:
Color:
rgba: root.background_color
Rectangle:
size: self.size
pos: self.pos
方法:
AddLabel()
def AddLabel(self,*arg):
for xn in range(0,8):
self.root.ids.DynBox.add_widget(Builder.load_string('''
Label:
text:
''' + '\'{}\''.format(xn)
))
self.root.ids.DynBox.add_widget(Builder.load_string('''
Label:
text:
''' + '\'{}\''.format(xn)
))
不能在三引号内,否则将不执行。您似乎在尝试将新的format(xn)
动态添加到现有的Labels
或DarkL
中,但是它们不是小部件容器,因此我将其更改为LightL
证明它有效。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。