Python3 Kivy BoxLayout поверх другого - PullRequest
0 голосов
/ 25 мая 2018

Я посмотрел документацию, чтобы узнать, как разместить мой макет коробки в моем окне

https://kivy.org/docs/api-kivy.uix.boxlayout.html

, но я хочу разместить свой BoxLayout поверх другого (с прозрачным фоном), напримерэто:

enter image description here

мой код (без моих пяти прозрачных красных прямоугольников)

from kivy.app import App

from kivy.uix.boxlayout import BoxLayout

from kivy.uix.button import Button



# Boxlayout is the App class

class BoxLayoutDemo(App):

    def build(self):

        superBox        = BoxLayout(orientation='vertical')



        horizontalBox   = BoxLayout(orientation='horizontal')

        button1         = Button(text="One")

        button2         = Button(text="Two")



        horizontalBox.add_widget(button1)

        horizontalBox.add_widget(button2)



        verticalBox     = BoxLayout(orientation='vertical')

        button3         = Button(text="Three")

        button4         = Button(text="Four")



        verticalBox.add_widget(button3)

        verticalBox.add_widget(button4)



        superBox.add_widget(horizontalBox)

        superBox.add_widget(verticalBox)



        return superBox





# Instantiate and run the kivy app

if __name__ == '__main__':

    BoxLayoutDemo().run()

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Используйте FloatLayout в качестве корневого виджета и pos_hint: {'top': 1} , чтобы вы могли разместить прозрачный BoxLayout сверху.Что касается прозрачности, используйте кнопки background_normal и background_color .

Snippets

FloatLayout:
...
    # topBox
    BoxLayout:
        Button:
            text: 'Five (with transparent red background)'
            background_normal: ''
            background_color: 0.8, 0, 0, 0.5  # 5% red
            size_hint: (0.5, 0.1)
            pos_hint: {'top': 1}

Пример

main.py

from kivy.lang import Builder
from kivy.base import runTouchApp

runTouchApp(Builder.load_string('''
FloatLayout:
    size: (300, 300)

    # superBox
    BoxLayout:
        orientation: 'vertical'

        # horizontalBox
        BoxLayout:
            # orientation: 'horizontal' - default orientation is horizontal
            Button:
                text: 'One'
            Button:
                text: 'Two'

        # verticalBox
        BoxLayout:
            orientation: 'vertical'
            Button:
                text: 'Three'
            Button:
                text: 'Four'

    # topBox
    BoxLayout:
        Button:
            text: 'Five (with transparent red background)'
            background_normal: ''
            background_color: 0.8, 0, 0, 0.5  # 5% red
            size_hint: (0.5, 0.1)
            pos_hint: {'top': 1}

'''))

Вывод

Img01

0 голосов
/ 25 мая 2018

Попробуйте поместить box-out в floatlayout, например:

from kivy.app import App
from kivy.lang import Builder


KV = """

<MyButton@Button>:
    background_color: (1,0,0,.5)

FloatLayout:

    BoxLayout:
        Button:
            text: "test"
        Button:
            text: "test"

    BoxLayout:
        orientation: "vertical"
        MyButton:
            text: "test"
        MyButton:
            text: "test"

"""


class MyApp(App):

    def build(self):
        return Builder.load_string(KV)

MyApp().run()

output:

enter image description here

...