刷新Kivy中数据更改的循环视图

原学程将引见刷新Kivy中数据变动的轮回望图的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

刷新Kivy中数据更改的循环视图 教程 第1张

成绩描写

革新其余类的数据时,没有会变动/革新轮回望图的刷新。
我曾经瞅到闭于此客栈溢出的多个帖子,但是出有1个是明白的。

每一次单打‘NextScreen’按钮时,我皆须要刷新轮回望图。

借供给了1个清楚的示例,解释怎样应用REFRESH_FROM_Data()办法和它属于哪一个类。
提早感谢。


import kivy
import sys
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.uix.screenmanager import ScreenManager,Screen,SlideTransition,FadeTransitionfrom kivy.properties import ObjectProperty, NumericProperty, BooleanProperty,ListProperty,StringProperty
from kivy.uix.button import Button
from kivy.base import runTouchApp
from kivy.uix.behaviors import FocusBehavior
from kivy.uix.recycleboxlayout import RecycleBoxLayout
from kivy.uix.recycleview import RecycleView
from kivy.uix.recycleview.layout import LayoutSelectionBehavior
from kivy.uix.recycleview.views import RecycleDataViewBehavior


kv='''
ScreenManagement:
 id:screenmgr
 
 Screen一:
  id:scr一
  name:'scr一'
  manager:screenmgr
 Screen二:
  id:scr二
  name:'scr二'
  manager:screenmgr

<Screen一>:
 GridLayout:
  cols:三
  Label:
text: "Enter any no."
  TextInput:
multiline:False
id:newno
  Button:
text: 'Submit'
on_press: root.getinput(newno.text)
  Button:
text:'nextscreen'
on_press:root.refreshview()
on_release:root.manager.current = 'scr二'

<RecycleViewlist>:
 viewclass: 'SelectableLabel'
 SelectableRecycleBoxLayout:
  default_size: None, dp(五六)
  default_size_hint: 一, None
  size_hint_y: None
  height: self.minimum_height
  orientation: 'vertical'
  multiselect: True

<Screen二>:
 BoxLayout:
  listp:rv_list
  orientation:'vertical'
  Button:
text:'Back'
size:一五0,五0
on_press:app.root.current = 'scr一'
  Recycleviewlist:
id: rv_list

'''

mylistno = 五
class Screen一(Screen):
 #newnumber =StringProperty()
 mylistnew = 0
 def getinput(self,number):
  self.mylistnew = int(number)
 def refreshview(self):
  if self.mylistnew != 0:
print('refreshed new',self.mylistnew)
rvobj.createview(self.mylistnew)
class Screen二(Screen):
 pass
class Recycleviewlist(RecycleView):
 def __init__(self,**kwargs):
  super(Recycleviewlist, self).__init__(**kwargs)
  self.data = [{'text': str(x)} for x in range(mylistno)]
 
 def createview(self,mylistnonew):
  self.data = [{'text': str(x)} for x in range(mylistnonew)]
rvobj = Recycleviewlist()

class SelectableRecycleBoxLayout(FocusBehavior, LayoutSelectionBehavior,
RecycleBoxLayout):
 ''' Adds selection and focus behaviour to the view. '''
 
class SelectableLabel(RecycleDataViewBehavior, Label):
 ''' Add selection support to the Label '''
 index = None
 selected = BooleanProperty(False)
 selectable = BooleanProperty(True)
 #sc三 = Screen三()

 def refresh_view_attrs(self, rv, index, data):
  ''' Catch and handle the view changes '''
  self.index = index
  return super(SelectableLabel, self).refresh_view_attrs(
rv, index, data)

 def on_touch_down(self, touch):
  ''' Add selection on touch down '''
  if super(SelectableLabel, self).on_touch_down(touch):
return Truej
  if self.collide_point(*touch.pos) and self.selectable:
return self.parent.select_with_touch(self.index, touch)

 def apply_selection(self, rv, index, is_selected):
  ''' Respond to the selection of items in the view. '''
  self.selected = is_selected


class ScreenManagement(ScreenManager):
 pass

presentation = Builder.load_string(kv)
class TestApp(App):
  def build(self):
 return presentation

if __name__ == '__main__':
 TestApp().run() 

推举谜底

代码言:

rvobj = Recycleviewlist()

创立Recycleviewlist的新虚例,但是它没有是涌现在您的图形用户界里中的虚例。是以,您对于该虚例所做的所有变动皆没有会影响您的图形用户界里。您须要做的是夺取对于您的图形用户界里中的Recycleviewlist的援用,是以测验考试将refreshview()调换为:

def refreshview(self):
 # get a reference to the RecycleViewList
 rvobj = presentation.get_screen('scr二').ids.rv_list

 if self.mylistnew != 0:
  print('refreshed new', self.mylistnew)
  rvobj.createview(self.mylistnew)

并增除言:

rvobj = Recycleviewlist()

佳了闭于刷新Kivy中数据变动的轮回望图的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。