Python 如何在kivy中更新RecycleView中的数据?
我从kivy那里了解到,RecycleView可以在数据更改后通过调用Python 如何在kivy中更新RecycleView中的数据?,python,kivy,Python,Kivy,我从kivy那里了解到,RecycleView可以在数据更改后通过调用refresh\u from\u data()手动更新数据。我还有几个问题 这是我的密码。我试图简化它,因为原来的一个相当长 在.py中 class FilterPage(Screen): def call_DB(self, price_min, price_max): 'codes and shits' 'Basically, I filter some result accordin
refresh\u from\u data()
手动更新数据。我还有几个问题
这是我的密码。我试图简化它,因为原来的一个相当长
在.py中
class FilterPage(Screen):
def call_DB(self, price_min, price_max):
'codes and shits'
'Basically, I filter some result according to users input'
'and store it in a list called real_result'
'I want to update content and length of real_result for RecycleView'
self.app = App.get_running_app()
self.rv = self.app.rv
self.rv.refresh_from_data()
class RV(RecycleView):
def __init__(self, **kwargs):
super(RV, self).__init__(**kwargs)
global real_result
self.data = [{'text': str(x)} for x in range(len(real_result))]
kv = Builder.load_file("test.kv")
class MyApp(App):
rv = RV()
def build(self):
return kv
MyApp().run()
单位:千伏
<ProductButton>:
on_release: print("success")
canvas.before:
Color:
rgba: (0.4, 0.9, 0.1, 0.3)
Rectangle:
pos: self.pos
size: self.size
<RV>:
viewclass: 'ProductButton'
RecycleBoxLayout:
default_size: None, dp(56)
default_size_hint: 1, None
size_hint_y: None
height: self.minimum_height
orientation: 'vertical'
multiselect: True
touch_multiselect: True
spacing: 10
<ProductPage>:
canvas:
Rectangle:
source: "dot01.png"
size: root.width, root.height
pos: self.pos
BoxLayout:
orientation: "vertical"
RV:
Button:
text: 'Previous screen'
size_hint: None, None
size: 150, 50
这个问题有点长,我删掉了很多代码。如果您需要更多详细信息,请在下面进行评论。非常感谢。要更改内容,只需更改包含的数据即可。不需要做任何额外的事情
class RV(RecycleView):
def __init__(self, **kwargs):
super(RV, self).__init__(**kwargs)
global real_result
self.data = [{'text': str(x)} for x in range(len(real_result))]
def alter_data(self):
self.data = [{'text': str(x+x)} for x in range(len(real_result))]
然后调用alter_data
在我的代码中,我使用:
def refresh_data(self):
self.data = []
records_new = self.PW.dbcon.session.query ...
for n_rows in records_new:
r_tab_name = n_rows.tab_name
d={'t_col1': r_tab_name.c1
, 't_col2': r_tab_name.c2
, 's_col3': r_tab_name.s3 if r_tab_name.s3 is not None else 0
}
self.data.append(d)
self.data_for_thz=self.data
千伏:
:
盒子布局:
盒子布局:
标签:
按钮:
按钮:
...
:
盒子布局:
标签:
...
回收审查:
viewclass:'LocalRecyWidget'
身份证:。。。。
数据:root.data_表示_thz
循环利用布局:
...
要更改内容,只需更改包含的数据即可。不需要做任何额外的事情
class RV(RecycleView):
def __init__(self, **kwargs):
super(RV, self).__init__(**kwargs)
global real_result
self.data = [{'text': str(x)} for x in range(len(real_result))]
def alter_data(self):
self.data = [{'text': str(x+x)} for x in range(len(real_result))]
然后调用alter_data
在我的代码中,我使用:
def refresh_data(self):
self.data = []
records_new = self.PW.dbcon.session.query ...
for n_rows in records_new:
r_tab_name = n_rows.tab_name
d={'t_col1': r_tab_name.c1
, 't_col2': r_tab_name.c2
, 's_col3': r_tab_name.s3 if r_tab_name.s3 is not None else 0
}
self.data.append(d)
self.data_for_thz=self.data
千伏:
:
盒子布局:
盒子布局:
标签:
按钮:
按钮:
...
:
盒子布局:
标签:
...
回收审查:
viewclass:'LocalRecyWidget'
身份证:。。。。
数据:root.data_表示_thz
循环利用布局:
...
我试图在self.rv.refresh\u from\u data()之后调用alter\u data(),但失败了。我在alter_data()中打印了real_结果的长度,它显示了正确的长度。但是RV什么也没显示。我是否在错误的位置调用了该函数?我猜在数据更改时会调用refresh_from_data()。因此,您必须在另一个调用中更改数据。您的意思是,也许我应该尝试在RecycleView中更新数据,以便执行类似于您的操作?当您更改数据时,视图会自动刷新,我想我尝试在self.rv.refresh\u from\u data()之后调用alter\u data(),但失败。我在alter_data()中打印了real_结果的长度,它显示了正确的长度。但是RV什么也没显示。我是否在错误的位置调用了该函数?我猜在数据更改时会调用refresh_from_data()。因此,您必须在另一个调用中更改数据。您的意思是,也许我应该尝试在RecycleView中更新数据,以便可以执行类似于您的操作?我认为,当您更改数据时,视图会自动刷新