mirror of https://github.com/kivy/kivy.git
53 lines
1.8 KiB
Python
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)
|