kivy/examples/widgets/lists/list_master_detail.py

53 lines
1.8 KiB
Python

from kivy.uix.gridlayout import GridLayout
from kivy.uix.listview import ListView, ListItemButton
from kivy.adapters.dictadapter import DictAdapter
from fixtures import fruit_data
from fruit_detail_view import FruitDetailView
class MasterDetailView(GridLayout):
'''Implementation of an master-detail view with a vertical scrollable list
on the left (the master, or source list) and a detail view on the right.
When selection changes in the master list, the content of the detail view
is updated.
'''
def __init__(self, items, **kwargs):
kwargs['cols'] = 2
super(MasterDetailView, self).__init__(**kwargs)
list_item_args_converter = \
lambda row_index, rec: {'text': rec['name'],
'size_hint_y': None,
'height': 25}
dict_adapter = DictAdapter(sorted_keys=sorted(fruit_data.keys()),
data=fruit_data,
args_converter=list_item_args_converter,
selection_mode='single',
allow_empty_selection=False,
cls=ListItemButton)
master_list_view = ListView(adapter=dict_adapter,
size_hint=(.3, 1.0))
self.add_widget(master_list_view)
detail_view = FruitDetailView(
fruit_name=dict_adapter.selection[0].text,
size_hint=(.7, 1.0))
dict_adapter.bind(on_selection_change=detail_view.fruit_changed)
self.add_widget(detail_view)
if __name__ == '__main__':
from kivy.base import runTouchApp
master_detail = MasterDetailView(sorted(fruit_data.keys()), width=800)
runTouchApp(master_detail)