Skip to content

Instantly share code, notes, and snippets.

@geojeff
Last active December 21, 2015 12:29
Show Gist options
  • Save geojeff/6306558 to your computer and use it in GitHub Desktop.
Save geojeff/6306558 to your computer and use it in GitHub Desktop.
from kivy.adapters.listadapter import ListAdapter
from kivy.adapters.models import SelectableDataItem
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
from kivy.uix.listview import ListView, ListItemButton
from fixtures import fruit_categories, fruit_data_list_of_dicts
from fruit_detail_view import FruitDetailView
class FruitsListAdapter(ListAdapter):
def db_query_one(self, list_adapter, *args):
self.data = fruit_data_items[10:15]
def db_query_two(self, list_adapter, *args):
self.data = fruit_data_items[4:9]
def db_query_three(self, list_adapter, *args):
self.data = fruit_data_items[13:-1]
class FruitItem(SelectableDataItem):
def __init__(self, **kwargs):
super(FruitItem, self).__init__(**kwargs)
self.name = kwargs.get('name', '')
self.serving_size = kwargs.get('Serving Size', '')
self.data = kwargs.get('data', [])
self.is_selected = kwargs.get('is_selected', False)
fruit_data_items = \
[FruitItem(**fruit_dict) for fruit_dict in fruit_data_list_of_dicts]
class QueryResultsView(GridLayout):
def __init__(self, **kwargs):
kwargs['cols'] = 3
super(QueryResultsView, self).__init__(**kwargs)
queries = BoxLayout(
orientation='vertical', size_hint=(None, 1), width=150)
query_button_one = Button(text='DB Query One')
query_button_two = Button(text='DB Query Two')
query_button_three = Button(text='DB Query Three')
queries.add_widget(query_button_one)
queries.add_widget(query_button_two)
queries.add_widget(query_button_three)
self.add_widget(queries)
list_item_args_converter = \
lambda row_index, selectable: {'text': selectable.name,
'size_hint_y': None,
'height': 25}
fruits_list_adapter = \
FruitsListAdapter(data=fruit_data_items,
args_converter=list_item_args_converter,
selection_mode='single',
allow_empty_selection=False,
cls=ListItemButton)
query_button_one.bind(on_release=fruits_list_adapter.db_query_one)
query_button_two.bind(on_release=fruits_list_adapter.db_query_two)
query_button_three.bind(on_release=fruits_list_adapter.db_query_three)
fruits_list_view = \
ListView(adapter=fruits_list_adapter, size_hint=(.2, 1.0))
self.add_widget(fruits_list_view)
# Detail view, for a given fruit, on the right:
#
detail_view = FruitDetailView(
fruit_name=fruits_list_adapter.selection[0].text,
size_hint=(.6, 1.0))
fruits_list_adapter.bind(
selection=detail_view.fruit_changed)
self.add_widget(detail_view)
if __name__ == '__main__':
from kivy.base import runTouchApp
runTouchApp(QueryResultsView(width=800))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment