krisdigitx
krisdigitx

Reputation: 7126

python kivy boxlayout set position

I am positioning the BoxLayout using this method

layout = BoxLayout(size_hint=(1, None), height=50, spacing=100, pos_hint={'y': 0.5 , 'top': 0.5})

however it centers in the middle, i want it to be placed in the top centre of the FloatLayout.

Also the code when run gives this warning....

[CRITICAL          ] [Clock       ] Warning, too much iteration done before the next frame. Check your code, or increase the Clock.max_iteration attribute
[CRITICAL          ] [Clock       ] Warning, too much iteration done before the next frame. Check your code, or increase the Clock.max_iteration attribute
[CRITICAL          ] [Clock       ] Warning, too much iteration done before the next frame. Check your code, or increase the Clock.max_iteration attribute
[CRITICAL          ] [Clock       ] Warning, too much iteration done before the next frame. Check your code, or increase the Clock.max_iteration attribute
[CRITICAL          ] [Clock       ] Warning, too much iteration done before the next frame. Check your code, or increase the Clock.max_iteration attribute
[INFO              ] [Base        ] Leaving application in progress...

below is the code:

import kivy
from kivy.app import App
from kivy.uix.anchorlayout import AnchorLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.widget import Widget
from kivy.uix.label import Label
from kivy.uix.video import Video
from kivy.uix.relativelayout import RelativeLayout
from kivy.graphics import *
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from random import random
from kivy.properties import ListProperty

kv = '''
<ColoredLabel>:
    size: (100,100)

    background_color:
    canvas.before:
        Color:
            rgba: self.background_color
        Rectangle:
            pos: self.pos
            size: self.size
    '''

Builder.load_string(kv)

class ColoredLabel(Label):
    background_color = ListProperty((0,0,0,1))

class MyApp(App):

    def build(self):
        f = FloatLayout()
        g = GridLayout(cols=5, rows=2, row_force_default=True, row_default_height=80)
        layout = BoxLayout(size_hint=(1, None), height=50, spacing=100, pos_hint={'y': 0.5 , 'top': 0.5})
        v = Video(source='driver.mp4', state='play', options={'eos':'loop'})
        l1 = Label(text="jenkins", font_size=32)
        l2 = Label(text="git", font_size=32)
        f.add_widget(v)

        """
        label1 = ColoredLabel(text="jenkins output", pos_hint={'top': 1, 'right': .1}, size_hint=(None, None) , background_color=(160,160,160,.5))
        f.add_widget(label1)

        label2 = ColoredLabel(text="git output", pos_hint={'top': 1, 'right': .5}, size_hint=(None, None) , background_color=(160,160,160,.5))
        f.add_widget(label2)

        label3 = ColoredLabel(text="dev output", pos_hint={'top': 1, 'right': .8}, size_hint=(None, None) , background_color=(160,160,160,.5))
        f.add_widget(label3)
        """

        text1 = "jenkins"

        label1 = ColoredLabel(text=text1, background_color=(160,160,160,.5))
        layout.add_widget(label1)

        label2 = ColoredLabel(text="git", background_color=(160,160,160,.5))
        layout.add_widget(label2)

        label3 = ColoredLabel(text="portal", background_color=(160,160,160,.5))
        layout.add_widget(label3)

        f.add_widget(layout)


        return f

if __name__ == "__main__":
    MyApp().run()

Upvotes: 0

Views: 11179

Answers (1)

Nykakin
Nykakin

Reputation: 8747

Use pos_hint={'top': 1}. Don't mix top with y, those two conflict with themselves as they both refer to verical position, which is the cause of your erros.

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.label import Label
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ListProperty

kv = '''
<ColoredLabel>:
    size: (100,100)

    background_color:
    canvas.before:
        Color:
            rgba: self.background_color
        Rectangle:
            pos: self.pos
            size: self.size
    '''

Builder.load_string(kv)

class ColoredLabel(Label):
    background_color = ListProperty((0,0,0,1))

class MyApp(App):
    def build(self):
        f = FloatLayout()
        layout = BoxLayout(size_hint=(1, None), height=50, pos_hint={'top': 1})

        label1 = ColoredLabel(text="jenkins", background_color=(160,160,160,.5))
        layout.add_widget(label1)

        label2 = ColoredLabel(text="git", background_color=(160,160,160,.5))
        layout.add_widget(label2)

        label3 = ColoredLabel(text="portal", background_color=(160,160,160,.5))
        layout.add_widget(label3)

        f.add_widget(layout)


        return f

if __name__ == "__main__":
    MyApp().run()

Also check out effect of using:

layout = BoxLayout(size_hint=(0.5, None), height=50, pos_hint={'top': 1})

and:

layout = BoxLayout(size_hint=(0.5, None), height=50, pos_hint={'top': 1, 'center_x':0.5})

Upvotes: 2

Related Questions