Search code examples
pythonpython-3.xkivykivy-language

Kivy 1.10.1 Slider duplicating itself


I'm currently trying to create a simple Slider that will control the size of text in my application. The problem I'm running into though is that even though the slider functions as I intended, it seems to create another version of itself beneath the first slider that can't be moved. You can see how it looks in the provided image here [alt text: a screenshot of a rudimentary user interface showing a kivy slider. The slider has been moved forward behind it there is another copy in the default position] (as you can see the Label text inside the BoxLayout is also getting overlapped). I'm currently using Kivy 1.10.1 and Python 3.7.2.

Here is my Python script:

 # -*- coding: utf-8 -*-
import kivy
kivy.require('1.10.1')
from kivy.app import App
from kivy.core.window import Window
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
from kivy.uix.actionbar import ActionBar
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
from kivy.graphics.vertex_instructions import (Rectangle, Ellipse, Line)
from kivy.graphics.context_instructions import Color
from kivy.uix.checkbox import CheckBox
from kivy.uix.slider import Slider

#Window.size = (360/1.2,740/1.2)

class HomeScreen(Screen):
    pass

class OptionsScreen(Screen):
    pass

class TutorialScreen(Screen):
    pass

class ScreenController(ScreenManager):
    pass

look = Builder.load_file('main.kv')

class MainApp(App):
    def build(self):
        return look

if __name__ == '__main__':
    MainApp().run()

And here is the relevant piece of Kivy language meant to create the slider on my

<OptionsScreen>
name: 'option'

BoxLayout:
    orientation:'vertical'
    BoxLayout:
        orientation:'horizontal'
        size_hint_y: 1/3
        Label:
            text:'Text size'
            font_size: textsize.value
            size_hint_x:.5
        Slider:
            id:textsize
            min: 5
            max: 25
            value:15
            step: 1
            size_hint_x:.5

Though if you want to read the entire Kivy language document I'm posting it here as well.

    #: import FadeTransition kivy.uix.screenmanager.FadeTransition
# Reference main.py
#: import main main
#: import Slider kivy.uix.slider
#: import ActionBar kivy.uix.actionbar
#: import Window kivy.core.window
ScreenController:
    transition: FadeTransition()
    HomeScreen:
    OptionsScreen:
    TutorialScreen:

<HomeScreen>
    name: 'home'
    BoxLayout:
        id:'hem'
        orientation:'vertical'
        BoxLayout:
            size_hint_x: 1
            orientation:'horizontal'
            canvas:
                Color:
                    rgba: 0,1,0,1
                Rectangle
                    size: self.size
                    pos: self.pos
        BoxLayout:
            orientation:'horizontal'
            BoxLayout:
                size_hint_x: .5
                orientation:'horizontal'
                canvas:
                    Color:
                        rgba: 1,0,1,1
                    Rectangle
                        size: self.size
                        pos: self.pos
            BoxLayout:
                size_hint_x: .5
                orientation:'horizontal'
                canvas:
                    Color:
                        rgba: 1,1,0,1
                    Rectangle
                        size: self.size
                        pos: self.pos

    ActionBar:
        pos_hint: {'top':1}

        ActionView:
            use_separator: True
            ActionPrevious:
                title: 'Fredde & Kribbas kivy'
                with_previous: False
            ActionOverflow:
            ActionGroup:
                text: 'Group1'
                ActionButton:
                    text: 'home'
                    on_touch_down: app.root.current = 'home'
                ActionButton:
                    text: 'Options'
                    on_touch_down: app.root.current = 'option'
                ActionButton:
                    text: 'Tutorial'
                    on_touch_down: app.root.current = 'tut'

<OptionsScreen>
    name: 'option'

    BoxLayout:
        orientation:'vertical'
        BoxLayout:
            orientation:'horizontal'
            size_hint_y: 1/3
            Label:
                text:'Text size'
                font_size: textsize.value
                size_hint_x:.5
            Slider:
                id:textsize
                min: 5
                max: 25
                value:15
                step: 1
                size_hint_x:.5
        BoxLayout:
            #fontsize checkbox
            orientation:'horizontal'
            size_hint_y: 1/3
            BoxLayout:
                orientation:'vertical'
                Label:
                    text: 'Nightmode'
                CheckBox:
                    id:default
                    size_hint_y: None
                    active: True
                    height:'50dp'
                    group:'g1'
            BoxLayout:
                orientation:'vertical'
                Label:
                    text: 'Daymode'

                CheckBox:
                    id:stor
                    size_hint_y: None
                    height:'50dp'
                    group:'g1'
        BoxLayout:
            orientation:'horizontal'
            size_hint_y: 1/3
            canvas:
                Color:
                    rgba: 0,0,1,1
                Rectangle
                    size: self.size
                    pos: self.pos

    ActionBar:
        pos_hint: {'top':1}
        ActionView:
            use_separator: True
            ActionPrevious:
                title: 'Fredde & Kribbas kivy'
                with_previous: False
            ActionOverflow:

            ActionGroup:
                text: 'Group1'
                ActionButton:
                    text: 'home'
                    on_touch_down: app.root.current = 'home'
                ActionButton:
                    text: 'Options'
                    on_touch_down: app.root.current = 'option'
                ActionButton:
                    text: 'Tutorial'
                    on_touch_down: app.root.current = 'tut'
<TutorialScreen>
    name: 'tut'

    ActionBar:
        pos_hint: {'top':1}
        ActionView:
            use_separator: True
            ActionPrevious:
                title: 'Fredde & Kribbas kivy'
                with_previous: False
            ActionOverflow:

            ActionGroup:
                text: 'Group1'
                ActionButton:
                    text: 'home'
                    on_touch_down: app.root.current = 'home'
                ActionButton:
                    text: 'Options'
                    on_touch_down: app.root.current = 'option'
                ActionButton:
                    text: 'Tutorial'
                    on_touch_down: app.root.current = 'tut'

Does anyone know why I might be having this issue? I'm fairly new to kivy but I've played around with the slider before and never had these issues until now.


Solution

  • You don't need to load your kv file inside your python code since you already named your kv file as main.kv.

    You can try to remove this line:

    look = Builder.load_file('main.kv')
    

    and change this line:

    return look
    

    to:

    pass