Кнопка «Изменить» в recycleview.Питон, Киви - PullRequest
0 голосов
/ 16 марта 2019

Моя цель - показать элемент списка из 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...