python - 如何在不使用 Kivy 语言的情况下在另一个布局中使用 Python Kivy RecycleView?
问题描述
我想在不使用 Kivy 语言的情况下在另一个布局中使用RecycleView,但我无法在 Window 上显示数据。我在代码中写错了什么或遗漏了什么?
我知道kv语言很好,但是我不想在这个小项目中使用它。
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.recycleboxlayout import RecycleBoxLayout
from kivy.uix.recycleview import RecycleView
class MainWidget(FloatLayout):
def __init__(self):
super().__init__()
self.create_layouts()
def create_layouts(self):
self.create_recycle_view()
def create_recycle_view(self):
recycle_view = RecycleView()
recycle_view.data = [{'text': str(x)} for x in range(20)]
recycle_view.viewclass = 'Label'
recycle_box_layout = RecycleBoxLayout()
recycle_box_layout.size_hint = (1, 0.2)
recycle_view.add_widget(recycle_box_layout)
self.add_widget(recycle_view)
class MainApp(App):
def build(self):
return MainWidget()
解决方案
某些类似乎有一些奇怪的副作用RecycleView
,导致viewclass
设置为None
. 因此,设置viewclass
必须晚于您的代码。另外,我认为RecycleView
不应该__init__()
用MainWidget
. 因此,基于此,您的代码的修改版本是:
from kivy.app import App
from kivy.clock import Clock
from kivy.metrics import dp
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.recycleboxlayout import RecycleBoxLayout
from kivy.uix.recycleview import RecycleView
class MainWidget(FloatLayout):
def create_layouts(self):
self.create_recycle_view()
def create_recycle_view(self):
recycle_box_layout = RecycleBoxLayout(default_size=(None, dp(56)), default_size_hint=(1, None),
size_hint=(1, None), orientation='vertical')
recycle_box_layout.bind(minimum_height=recycle_box_layout.setter("height"))
recycle_view = RecycleView()
recycle_view.add_widget(recycle_box_layout)
recycle_view.viewclass = 'Label'
self.add_widget(recycle_view)
recycle_view.data = [{'text': str(x)} for x in range(20)]
class MainApp(App):
def build(self):
Clock.schedule_once(self.add_rv)
return MainWidget()
def add_rv(self, dt):
self.root.create_layouts()
MainApp().run()
此代码使用Clock.schedule_once()
(在 的build()
方法中App
)构建RecycleView
. 此外,height
of theRecycleBoxLayout
绑定到它的minimum_height
属性。
推荐阅读
- javascript - 如何获取数组发布值
- python - Pandas TypeError:只能将str(不是“int”)连接到str
- java - 我正在尝试在 javafx 上的游戏上添加开始屏幕
- excel - 如何将重复的行转为列?
- javascript - 将元素高度设置为 clientHeight 导致页面滚动
- python - 使用 os.system(
) 期望用户在 pyhton 中输入 - php - Guzzle 不接受表单参数中的数组
- javascript - 我们可以使用 javascript/typescript 覆盖“另一个应用程序正在显示 chrome 错误”吗?
- javascript - React Axios,无法读取 axios 响应中的 Set-Cookie 标头
- visualization - 张量板中的线图