Kivy Popup сменить фон - PullRequest
       19

Kivy Popup сменить фон

0 голосов
/ 14 апреля 2020

Я не уверен, почему, но когда я хочу изменить свой всплывающий фон (который я создаю в python, а не в киве), я меняю фон всего экрана, кроме моего реального всплывающего окна. Мой код выглядит так (много разбито):

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.popup import Popup
from kivy.uix.label import Label
from kivy.core.window import Window

class BoxL(BoxLayout):
    def chooseFile(self):
        self.chosePop = Popup()
        self.chosePop.title = 'My Popup'
        choseBox = BoxLayout()
        choseBoxLabel = Label()
        choseBoxLabel.text = 'Any Text'
        choseBox.add_widget(choseBoxLabel)
        self.chosePop.content = choseBox
        self.chosePop.background_normal = ''
        self.chosePop.background_color = 0.5, 0.75, 0, 0.75
        self.chosePop.open()

class GUI(App):
    def build(self):
        self.title = 'MyApp'
        return BoxL()

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

Я также попробовал следующее:

from kivy.graphics import Rectangle, Color

class BoxL(BoxLayout):
    def chooseFile(self):
        with self.chosePop.canvas:
             Color(0, 0.5, 0.75, 0.75)
             Rectangle(pos=choseBox.pos, size=choseBox.size)
             #Rectangle(pos=self.chosePop.pos, size=self.chosePop.size) #this brings the correct size but at a wrong position, and the original popup background doesnt get changed either)

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

На самом деле, я думаю, что это действительно просто. Мой ответ более усложняет проблему. Я считаю, что все, что вам нужно, это добавить строку:

self.chosePop.opacity = 0.5

сразу после создания Popup.

0 голосов
/ 14 апреля 2020

В вашем Popup большая часть того, что вы видите, является фоном Labels. Один Label - это title, а другой - ваш ChooseBoxLabel. Вы можете легко настроить цвет фона ChooseBoxLabel, используя пользовательский класс с правилом kv для создания цветного Rectangle для фона. title Label сложнее, поскольку разработчик Popup никак не мог получить доступ к этому title цвету фона.

Вот пример некоторых вещей, которые вы можете сделать:

from kivy.app import App
from kivy.clock import Clock
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.popup import Popup
from kivy.uix.label import Label

class MyBoxLayout(BoxLayout):
    pass

Builder.load_string('''
<Label>:  # Note that this affects EVERY Label in the app
    canvas.before:
        Color:
            rgba: 1,0,0,1
        Rectangle:
            pos: self.pos
            size: self.size
<MyBoxLayout>:
    canvas.before:
        Color:
            rgba: 0,0,1,1
        Rectangle:
            pos: self.pos
            size: self.size
''')

class BoxL(BoxLayout):
    def chooseFile(self):
        self.chosePop = Popup()
        self.chosePop.title = 'My Popup'
        choseBox = MyBoxLayout()
        choseBoxLabel = Label()
        choseBoxLabel.size_hint_y = 0.2
        choseBoxLabel.text = 'Any Text'
        choseBox.add_widget(choseBoxLabel)
        self.chosePop.content = choseBox
        self.chosePop.size_hint = (.5, .5)
        self.chosePop.open()

class GUI(App):
    def build(self):
        self.title = 'MyApp'
        Clock.schedule_once(self.do_popup, 3)
        return BoxL()

    def do_popup(self, dt):
        self.root.chooseFile()

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

В приведенном выше коде пользовательский класс MyBoxLayout предоставляет синий фон, который виден только если Label в нем не заполнение Layout. Правило Label в kv предоставляет цвет фона для title и chooseBoxLabel, но оно влияет на каждый Label в App.

...