我能够让我的布局与静态 kivy 语言一起工作,但我需要能够通过 python 将项目添加到我的列表中。我已经尝试了几件事,但似乎无法使任何事情正常工作。这是我静态工作的内容。
主要.py
#!/usr/bin/python
import os
import kivy
kivy.require('1.8.0')
from kivy.app import App
from kivy.core.window import Window
from kivy.logger import Logger
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
class CustomButton(Button):
pass
def click(button):
Logger.info(button.title + ": wid=" + button.wid)
class SelectFruit(App, BoxLayout):
icon = 'ico/fruit.png'
title = 'Awesome Fruit Picker'
def build(self):
Window.size = 400, (4 * 78)
return SelectFruit()
if __name__ in ('__main__'):
SelectFruit().run()
选择水果.kv
#:kivy 1.8.0
<CustomButton@Button>:
wid: ""
image: ''
title: ''
label: ''
on_press: self.click()
BoxLayout:
orientation: "horizontal"
size: self.parent.size # match the button's size
pos: self.parent.pos # match the button's position
padding: 5
spacing: 10
Image:
size_hint: None, 1
source: root.image
size: 64, 64
valign: "middle"
Label:
size_hint: None, 1
text: root.label
valign: "middle"
size: 400, 64
text_size: self.size
<SelectFruit>
orientation: "vertical"
padding: 2
CustomButton:
wid: "0"
image: "ico/apple.png"
title: "apple"
label: "Apple: Super Sweet\nPicked On: 12/26/2014, 2:01 PM"
CustomButton:
wid: "1"
image: "ico/banana.png"
title: "banana"
label: "Banana: Want a bunch?\nPicked On: 2/18/2014, 2:01 PM"
CustomButton:
wid: "2"
image: "ico/strawberry.png"
title: "strawberry"
label: "Strawberry: Yummy Yummy\nPicked On: 5/6/2014, 2:01 PM"
CustomButton:
wid: "3"
image: "ico/orange.png"
title: "orange"
label: "Orange: Florida's Best\nPicked On: 4/21/2014, 2:01 PM"
我只需要能够以编程方式将每个 CustomButton 添加到我的布局中,而不是通过 kivy 语言文件。 非常感谢任何帮助。
最佳答案
这里的工作代码显示了一些用 kivy 语言添加的项目,然后以编程方式添加了一些额外的项目。我还添加了 ScrollView,这是一个配置设置,用于防止窗口被调整大小,以及用于突出显示所选项目的代码。
我希望这对将来的人有所帮助。 :)
主要.py
#!/usr/bin/python
from kivy.config import Config
Config.set('graphics','resizable',0)
import kivy
kivy.require('1.8.0')
from kivy.app import App
from kivy.core.window import Window
from kivy.properties import ObjectProperty, StringProperty
from kivy.logger import Logger
from kivy.uix.scrollview import ScrollView
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
class ButtonListItem(Button):
wid = StringProperty('')
image = StringProperty('')
title = StringProperty('')
label = StringProperty('')
pass
def click(button):
global app
app.clearSelection()
button.background_color = (0,160,66,.9)
Logger.info(button.title + ": wid=" + button.wid)
class ButtonList(GridLayout):
pass
class SelectFruit(App):
icon = 'ico/fruit.png'
title = 'Awesome Fruit Picker'
def build(self):
Window.size = 400, (4 * 90)
self.layout = ButtonList()
self.layout.size = 400, (8 * 78)
self.root = ScrollView(
size_hint=(None, None),
size=Window.size,
scroll_type=['bars', 'content']
)
self.root.add_widget(self.layout)
ib = ButtonListItem(
wid="0",
image="ico/apple.png",
title="apple",
label="Apple: Super Sweet\nPicked On: 12/26/2014, 2:01 PM"
)
self.layout.add_widget(ib)
ib = ButtonListItem(
wid="1",
image="ico/banana.png",
title="banana",
label="Banana: Want a bunch?\nPicked On: 2/18/2014, 2:01 PM"
)
self.layout.add_widget(ib)
ib = ButtonListItem(
wid="2",
image="ico/strawberry.png",
title="strawberry",
label="Strawberry: Yummy Yummy\nPicked On: 5/6/2014, 2:01 PM"
)
self.layout.add_widget(ib)
ib = ButtonListItem(
wid="3",
image="ico/orange.png",
title="orange",
label="Orange: Florida's Best\nPicked On: 4/21/2014, 2:01 PM"
)
self.layout.add_widget(ib)
return self.root
def clearSelection(self):
for child in self.layout.children:
child.background_color = (1,1,1,1)
if __name__ == "__main__":
app = SelectFruit()
app.run()
选择水果.kv
#:kivy 1.8.0
<ButtonListItem@Button>:
wid: self.wid
image: self.image
title: self.title
label: self.label
on_press: self.click()
BoxLayout:
orientation: "horizontal"
size: self.parent.size # match the button's size
pos: self.parent.pos # match the button's position
padding: 5
spacing: 10
Image:
size_hint: None, 1
source: root.image
size: 64, 64
valign: "middle"
Label:
size_hint: None, 1
text: root.label
valign: "middle"
size: 400, 64
text_size: self.size
<ButtonList@GridLayout>
id: output
cols: 1
size_hint_y: None
height: self.minimum_height
ButtonListItem:
wid: "0"
image: "ico/apple.png"
title: "xapple"
label: "Apple: Super Sweet\nPicked On: 12/26/2014, 2:01 PM"
ButtonListItem:
wid: "1"
image: "ico/banana.png"
title: "xbanana"
label: "Banana: Want a bunch?\nPicked On: 2/18/2014, 2:01 PM"
ButtonListItem:
wid: "2"
image: "ico/strawberry.png"
title: "xstrawberry"
label: "Strawberry: Yummy Yummy\nPicked On: 5/6/2014, 2:01 PM"
ButtonListItem:
wid: "3"
image: "ico/orange.png"
title: "xorange"
label: "Orange: Florida's Best\nPicked On: 4/21/2014, 2:01 PM"
关于python - kivy通过python动态添加自定义小部件到布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28577828/