kivy dynamically add custom widget to layout via python(kivy通过python动态添加自定义小部件到布局)
问题描述
我能够让我的布局使用静态 kivy 语言,但我需要能够通过 python 将项目添加到我的列表中.我已经尝试了几件事,但似乎无法让任何东西正常工作.这是我静态工作的内容.
I was able to get my layout working with static kivy language but I need to be able to add items to my list via python. I've tried several things but can't seem to get anything working correctly. Here's what I have working statically.
main.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
Picked On: 12/26/2014, 2:01 PM"
CustomButton:
wid: "1"
image: "ico/banana.png"
title: "banana"
label: "Banana: Want a bunch?
Picked On: 2/18/2014, 2:01 PM"
CustomButton:
wid: "2"
image: "ico/strawberry.png"
title: "strawberry"
label: "Strawberry: Yummy Yummy
Picked On: 5/6/2014, 2:01 PM"
CustomButton:
wid: "3"
image: "ico/orange.png"
title: "orange"
label: "Orange: Florida's Best
Picked On: 4/21/2014, 2:01 PM"
我只需要能够以编程方式将每个 CustomButton 添加到我的布局中,而不是通过 kivy 语言文件.非常感谢任何帮助.
I just need to be able to add each CustomButton programmatically to my layout rather than via the kivy language file. Any help is greatly appreciated.
推荐答案
下面是工作代码,显示了一些以 kivy 语言添加的项目,然后以编程方式添加了一些附加项目.我还添加了 ScrollView,这是一个配置设置以防止窗口被调整大小和代码以突出显示选定的项目.
Here's the working code showing some items added in kivy language and then some additional items added programmatically. I also added the ScrollView, a configuration setting to keep the window from being resized and code to highlight the selected item.
我希望这对将来的某人有所帮助.:)
I hope this is helpful to someone in the future. :)
main.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
Picked 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?
Picked 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
Picked 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
Picked 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
Picked On: 12/26/2014, 2:01 PM"
ButtonListItem:
wid: "1"
image: "ico/banana.png"
title: "xbanana"
label: "Banana: Want a bunch?
Picked On: 2/18/2014, 2:01 PM"
ButtonListItem:
wid: "2"
image: "ico/strawberry.png"
title: "xstrawberry"
label: "Strawberry: Yummy Yummy
Picked On: 5/6/2014, 2:01 PM"
ButtonListItem:
wid: "3"
image: "ico/orange.png"
title: "xorange"
label: "Orange: Florida's Best
Picked On: 4/21/2014, 2:01 PM"
这篇关于kivy通过python动态添加自定义小部件到布局的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:kivy通过python动态添加自定义小部件到布局


基础教程推荐
- 修改列表中的数据帧不起作用 2022-01-01
- 包装空间模型 2022-01-01
- 在Python中从Azure BLOB存储中读取文件 2022-01-01
- 求两个直方图的卷积 2022-01-01
- 在同一图形上绘制Bokeh的烛台和音量条 2022-01-01
- PANDA VALUE_COUNTS包含GROUP BY之前的所有值 2022-01-01
- 使用大型矩阵时禁止 Pycharm 输出中的自动换行符 2022-01-01
- Plotly:如何设置绘图图形的样式,使其不显示缺失日期的间隙? 2022-01-01
- PermissionError: pip 从 8.1.1 升级到 8.1.2 2022-01-01
- 无法导入 Pytorch [WinError 126] 找不到指定的模块 2022-01-01