Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

kivy: horizontal ListView

Is there posibility to create in Kivy framework horizontal ListView?

All examples shows how to create a list of elements with vertical orientation, but i need to arrange them horizontally with horizontal scrollbar.

Defaults:


:                   :
|                   |
+-------------------+  ^
|                   |  ^
|     Element 5     |  ^
|                   |  |
+-------------------+  |
|                   |  |
|     Element 6     |  |
|                   |  |
+-------------------+  |
|                   |  |
|     Element 7     |  |
|                   |  v
+-------------------+  v
|                   |  v
:                   :

I would like to:

... --+-----------+-----------+-----------+---- ...
      |           |           |           |
      | Element 5 | Element 6 | Element 7 |
      |           |           |           |
... --+-----------+-----------+-----------+---- ...

   <&lt<---------------------------------------->>>
like image 934
JNLK Avatar asked Mar 15 '26 18:03

JNLK


1 Answers

Orientation is hard-coded. If you look at https://github.com/kivy/kivy/blob/master/kivy/uix/listview.py you will find:

Builder.load_string('''
<ListView>:
    container: container
    ScrollView:
        pos: root.pos
        on_scroll_y: root._scroll(args[1])
        do_scroll_x: False
        GridLayout:
            cols: 1
            id: container
            size_hint_y: None
''')

I copied this file into project directory and replaced this with:

Builder.load_string('''
<ListView>:
    container: container
    ScrollView:
        pos: root.pos
        on_scroll_y: root._scroll(args[1])
        do_scroll_x: False
        GridLayout:
            rows: 1
            id: container
            size_hint_y: None
''')

And with this test code:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from listview import ListView
from kivy.uix.gridlayout import GridLayout


class MainView(GridLayout):
    def __init__(self, **kwargs):
        kwargs['cols'] = 2
        super(MainView, self).__init__(**kwargs)

        list_view = ListView(item_strings=[str(index) for index in range(100)])

        self.add_widget(list_view)


if __name__ == '__main__':
    from kivy.base import runTouchApp
    runTouchApp(MainView(width=800))

I managed to get horizontal list. However, it broke the scrolling. Looks like you have to alter this configuration more and modify scrolling method as well to achieve desired result.

like image 146
Nykakin Avatar answered Mar 18 '26 09:03

Nykakin



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!