[英]How can i add a widget to gridlayout in the .kv file from python?
我試圖遍歷 python 中的對象列表,並將它們添加到 my.kv 文件中的 gridlayout。
主.py文件:
import kivy
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
kivy.require('2.1.0')
posts = [('post1 title', 'post1 content), ('post2 title', 'post2 content)]
class Post:
def __init__(self, title, content):
self.title = title
self.content = content
class MainPage(Screen):
posts_to_display = [Post(post[1], post[2]) for post in posts]
class Window(App):
def build(self):
sm = ScreenManager()
sm.add_widget(MainPage(name="homepage"))
return sm
if __name__ == '__main__':
Window().run()
.kv 文件:
#kivy 2.1.0
<MainPage>:
canvas.before:
Color:
rgba: (28/255, 31/255, 33/255, 1)
Rectangle:
pos:self.pos
size:self.size
ScrollView:
GridLayout:
rows: 5
size_hint_y: 1.5
spacing: 10, 10
padding: 10, 10
如何將 posts_to_display 中的所有元素添加到posts_to_display
?
我嘗試導入kivy.uix.gridlayout
但找不到與 .kv 文件交互的方法
你可以做這樣的事情,如果你不想滾動GridLayout
,只需刪除ScrollView
和self.size_hint_y = None; self.height = 50
self.size_hint_y = None; self.height = 50
。
from kivy.app import App
from kivy.uix.button import Button
from kivy.lang.builder import Builder
from kivy.uix.screenmanager import Screen
from kivy.clock import Clock
posts = [(f'title {i}', f'content {i}') for i in range(10)]
KV = """
<MainPage>:
canvas.before:
Color:
rgba: (28/255, 31/255, 33/255, 1)
Rectangle:
pos:self.pos
size:self.size
ScrollView:
GridLayout:
id: grid
rows: 5
size_hint_y: None
spacing: dp(10)
padding: [dp(10), ]
BoxLayout:
ScreenManager:
MainPage:
id: mp
name: "homepage"
"""
class Post(Button):
def __init__(self, title: str, content: str, **kwargs):
super().__init__(**kwargs)
self.text = title
self.content = content
self.size_hint_y = None
self.height = 50
class MainPage(Screen):
posts_to_display = [Post(post[0], post[1]) for post in posts]
def post_add(self):
for widget in self.posts_to_display:
self.ids.grid.add_widget(widget)
class TestApp(App):
def build(self):
return Builder.load_string(KV)
def on_start(self):
Clock.schedule_once(lambda dt: self.root.ids.mp.post_add())
if __name__ == '__main__':
TestApp().run()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.