Kivy: Having trouble getting two Recycleviews to show up in my Kivy application

Viewed 22

I'm working on a kivy application. I create two recycleViews, both pull data from a database table and I want the data to be displayed under the two recycleviews. I've created the following .kv file:

#:kivy 2.1.0
<SelectableUserBoxLayout>:
    # Draw a background to indicate selection
    font_size: '26sp'
    canvas.before:
        Color:
            rgba: (.0, 0.9, .1, .3) if self.selected else (0, 0, 0, 1)
        Rectangle:
            pos: self.pos
            size: self.size
    userid: ""
    uniqueid: ""
    displayname: ""
    status: ""
    permissionid: ""
    
    GridLayout:
        cols:5
        Label:
            text: root.userid
        Label:
            text: root.uniqueid
        Label:
            text: root.displayname
        Label:
            text: root.status
        Label:
            text: root.permissionid

<SelectableUserBoxLayout>:
    # Draw a background to indicate selection
    font_size: '26sp'
    canvas.before:
        Color:
            rgba: (.0, 0.9, .1, .3) if self.selected else (0, 0, 0, 1)
        Rectangle:
            pos: self.pos
            size: self.size
    resid: ""
    startTime: ""
    endTime: ""
    userId: ""
    lockerId: ""
    
    GridLayout:
        cols:5
        Label:
            text: root.resid
        Label:
            text: root.startTime
        Label:
            text: root.endTime
        Label:
            text: root.userId
        Label:
            text: root.lockerId

<UserListView>:
    id: userlist
    viewclass: 'SelectableUserBoxLayout'
    SelectableUserRecycleBoxLayout:
        id: controller
        default_size: None, dp(56)
        default_size_hint: 1, None
        size_hint_y: None
        height: self.minimum_height
        orientation: 'vertical'
        multiselect: True
        touch_multiselect: True
        font_size: '26sp'

<ReservationListView>:
    #id: reservationlist
    viewclass: 'SelectableReservationBoxLayout'
    SelectableReservationRecycleBoxLayout:
        id: rescontroller
        default_size: None, dp(56)
        default_size_hint: 1, None
        size_hint_y: None
        height: self.minimum_height
        orientation: 'vertical'
        multiselect: True
        touch_multiselect: True
        font_size: '26sp'

<ManagementScreen>:
    name: 'managementscreen'
    #id: management_screen
    BoxLayout:
        orientation: 'vertical'
        
        canvas.before:
            Rectangle:
                pos: self.pos
                size: self.size
                source: './assets/background.png'
        Label:
            font_size: '26sp'
            size_hint_y: 0.1
            text: 'Management Screen'
        GridLayout:
            cols: 3
            size_hint_y: 0.9
            spacing: 10
            padding: 10
            GridLayout:
                rows: 2
                GridLayout:
                    size_hint_y: .15
                    cols:5
                    canvas.before:
                        Color:
                            rgba: (0, 0, 0, 1)
                        Rectangle:
                            pos: self.pos
                            size: self.size
                    Label:
                        text: 'UserID'
                    Label:
                        text: 'UniqueIdentifier'
                    Label:
                        text: 'DisplayName'
                    Label:
                        text: 'Status'
                    Label:
                        text: 'PermissionID'
                UserListView:
                    id: recview
                    key_selection: 'selectable'
                    size_hint_x: .4
            GridLayout:
                rows:2
                GridLayout:
                    size_hint_y: .15
                    cols:5
                    canvas.before:
                        Color:
                            rgba: (0, 0, 0, 1)
                        Rectangle:
                            pos: self.pos
                            size: self.size
                    Label:
                        text: 'ReservationID'
                    Label:
                        text: 'StartTime'
                    Label:
                        text: 'EndTime'
                    Label:
                        text: 'UserID'
                    Label:
                        text: 'LockerID'
                ReservationListView:
                    id: resrecview
                    key_selection: 'selectable'
                    size_hint_x: .4
            GridLayout:
                size_hint_x: .2
                rows: 4
                spacing: 0
                padding: 0
                Button:
                    text: 'Verwijder'
                    font_size: '26sp'
                    on_release: recview.delete_user()
                Button:
                    text: 'Laad CSV'
                    font_size: '26sp'
                Button:
                    text: 'Reserveringen'
                    font_size: '26sp'

These are the relevant Recycleviews:

class UserListView(RecycleView):
    def __init__(self, **kwargs):
        super(UserListView, self).__init__(**kwargs)
        self.data = [{"userid": str(x[0]),"uniqueid": x[1], "displayname": str(x[2]), "status": str(x[3]), "permissionid": str(x[4]), "selected":False} for x in database.get_all_users()]

class ReservationListView(RecycleView):
    def __init__(self, **kwargs):
        super(ReservationListView, self).__init__(**kwargs)
        self.data = [{"resid": str(x[0]),"startTime": x[1], "endTime": str(x[2]), "userId": str(x[3]), "lockerId": str(x[4]), "selected":False} for x in database.get_all_reservations()]

while the colums show correctly, the data under the colums aren't. To illustrate (mind that my application runs on a raspberry pi with a custom screen): enter image description here

As you can see, my columns load correctly, and the first recycleview loads userdata from the database. The data, however isn't lined up properly. My second recycleview loads reservation data from the database. When I tap under the column, my screen shows data being clicked, but isn't displayed correctly in the recycleview.

My questions:

  1. How can I get the data to line up correctly to my colums?
  2. How can I get the data under my second column to be displayed correctly?

Edit: Seems like I've used SelectableUserBoxLayout twice. That explains a lot! I've rewritten my .kv file and it now works the way I want. my new .kv file:

#:kivy 2.1.0
<SelectableUserBoxLayout>:
    # Draw a background to indicate selection
    font_size: '26sp'
    canvas.before:
        Color:
            rgba: (.0, 0.9, .1, .3) if self.selected else (0, 0, 0, 1)
        Rectangle:
            pos: self.pos
            size: self.size
    userid: ""
    uniqueid: ""
    status: ""
    permissionid: ""
    
    GridLayout:
        cols:4
        Label:
            text: root.userid
            size_hint_x: .1
        Label:
            text: root.uniqueid
            size_hint_x: .6
        Label:
            text: root.status
            size_hint_x: .1
        Label:
            text: root.permissionid
            size_hint_x: .2


<SelectableReservationBoxLayout>:
    # Draw a background to indicate selection
    font_size: '26sp'
    canvas.before:
        Color:
            rgba: (.0, 0.9, .1, .3) if self.selected else (0, 0, 0, 1)
        Rectangle:
            pos: self.pos
            size: self.size
    resid: ""
    startTime: ""
    endTime: ""
    userId: ""
    lockerId: ""
    
    GridLayout:
        cols:5
        Label:
            text: root.resid
            size_hint_x: .2
        Label:
            text: root.startTime
            size_hint_x: .3
        Label:
            text: root.endTime
            size_hint_x: .3
        Label:
            text: root.userId
            size_hint_x: .1
        Label:
            text: root.lockerId
            size_hint_x: .1

<ReservationListView>:
    viewclass: 'SelectableReservationBoxLayout'
    SelectableReservationRecycleBoxLayout:
        id: rescontroller
        default_size: None, dp(56)
        default_size_hint: 1, None
        size_hint_y: None
        height: self.minimum_height
        orientation: 'vertical'
        multiselect: True
        touch_multiselect: True
        font_size: '26sp'

<UserListView>:
    viewclass: 'SelectableUserBoxLayout'
    SelectableUserRecycleBoxLayout:
        id: controller
        default_size: None, dp(56)
        default_size_hint: 1, None
        size_hint_y: None
        height: self.minimum_height
        orientation: 'vertical'
        multiselect: True
        touch_multiselect: True
        font_size: '26sp'

<ManagementScreen>:
    name: 'managementscreen'
    id: management_screen
    BoxLayout:
        orientation: 'vertical'
        
        canvas.before:
            Rectangle:
                pos: self.pos
                size: self.size
                source: './assets/background.png'
        Label:
            font_size: '26sp'
            size_hint_y: 0.1
            text: 'Management Screen'
        GridLayout:
            cols: 3
            spacing: 10
            padding: 10
            GridLayout:
                cols: 1
                size_hint_x: .45
                canvas.before:
                    Color:
                        rgba: (.0, 0.9, .1, .3)
                    Rectangle:
                        pos: self.pos
                        size: self.size
                GridLayout:
                    size_hint_y: .15
                    cols: 4
                    canvas.before:
                        Color:
                            rgba: (0, 0, 0, 1)
                        Rectangle:
                            pos: self.pos
                            size: self.size
                    Label:
                        text: 'UserID'
                        size_hint_x: .1
                    Label:
                        text: 'UniqueIdentifier'
                        size_hint_x: .6
                    Label:
                        text: 'Status'
                        size_hint_x: .1
                    Label:
                        text: 'PermissionID'
                        size_hint_x: .2
                UserListView:
                    id: userview
                    size_hint_y: .85
            GridLayout:
                cols: 1
                size_hint_x: .45
                canvas.before:
                    Color:
                        rgba: (.0, 0.9, .1, .3)
                    Rectangle:
                        pos: self.pos
                        size: self.size
                GridLayout:
                    size_hint_y: .15
                    cols: 5
                    canvas.before:
                        Color:
                            rgba: (0, 0, 0, 1)
                        Rectangle:
                            pos: self.pos
                            size: self.size
                    Label:
                        text: 'ReservationID'
                        size_hint_x: .2
                    Label:
                        text: 'StartTime'
                        size_hint_x: .3
                    Label:
                        text: 'EndTime'
                        size_hint_x: .3
                    Label:
                        text: 'UserID'
                        size_hint_x: .1
                    Label:
                        text: 'LockerID'
                        size_hint_x: .1
                ReservationListView:
                    id: resview
                    size_hint_y: .85
            GridLayout:
                rows: 3
                size_hint_x: .1
                canvas.before:
                    Color:
                        rgba: (.0, 0.9, .1, .3)
                    Rectangle:
                        pos: self.pos
                        size: self.size
                Button:
                    text: 'Verwijder'
                    font_size: '26sp'
                    on_release: userview.delete_user()
                Button:
                    text: 'Laad CSV'
                    font_size: '26sp'
                Button:
                    text: 'Reserveringen'
                    font_size: '26sp'

This question can be closed.

0 Answers
Related