Моя цель - показать элемент списка из RequestsList
при вводе текста после того, как я нажму кнопку Edit
.Я выставил новый event
- 'on_request_edit'
и свойство TextInput
.Я понятия не имею, где общая область действия этих двух классов, чтобы соединить их, потому что RequestRow
это просто viewclass
из RequestList
from kivy.config import Config
Config.set('graphics', 'multisamples', '0')
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.recycleview.views import RecycleDataViewBehavior
from kivy.uix.label import Label
from kivy.uix.recycleview import RecycleView
from kivy.uix.behaviors import FocusBehavior
from kivy.uix.recycleview.layout import LayoutSelectionBehavior
from kivy.uix.recycleboxlayout import RecycleBoxLayout
kv = '''
#:import FadeTransition kivy.uix.screenmanager.FadeTransition
ScreenManagement:
transition: FadeTransition()
RequestScreen:
<AddRequest>:
request_text: ''
TextInput:
id: request_task
hint_text: 'Task'
text: root.request_text
<RequestRow>:
size_hint_y: None
orientation: 'horizontal'
pos: self.pos
size: self.size
BoxLayout:
orientation: 'horizontal'
Label:
size_hint_x: None
size: 90,20
id: id_row_request
Button:
size_hint_x: None
text: 'Edit'
on_press: root.dispatch('on_request_edit')
<RequestsList>:
id: rv
viewclass: 'RequestRow'
SelectableRecycleBoxLayout:
spacing: 15
default_size: 100, dp(25)
default_size_hint: 1, None
size_hint_y: None
height: self.minimum_height
orientation: 'vertical'
multiselect: True
<RequestScreen>
BoxLayout:
orientation: 'horizontal'
GridLayout:
rows: 2
AddRequest:
id: addrequest
size_hint_y: None
height: 90
RequestsList:
'''
class SelectableRecycleBoxLayout(FocusBehavior, LayoutSelectionBehavior,
RecycleBoxLayout):
pass
class AddRequest(BoxLayout, RecycleDataViewBehavior):
def __init__(self, **kwargs):
super().__init__(**kwargs)
class RequestRow(RecycleDataViewBehavior, BoxLayout, Label):
index = None
def __init__(self, **kwargs):
self.register_event_type('on_request_edit')
super().__init__(**kwargs)
def refresh_view_attrs(self, rv, index, data):
self.ids['id_row_request'].text = data['request']
return super(RequestRow, self).refresh_view_attrs(
rv, index, data)
def on_request_edit(self):
print('pressed')
class RequestsList(RecycleView):
data = [{'request': 'A'},
{'request': 'B'},
{'request': 'C'},
{'request': 'D'},
{'request': 'E'},
{'request': 'F'},]
def __init__(self, **kwargs):
super(RequestsList, self).__init__(**kwargs)
class RequestScreen(Screen):
pass
class ScreenManagement(ScreenManager):
pass
sm = Builder.load_string(kv)
class TestApp(App):
def build(self):
return sm
if __name__ == '__main__':
TestApp().run()