【问题标题】:Kivy Popup change backgroundKivy Popup 更改背景
【发布时间】:2020-07-27 06:36:22
【问题描述】:

我不知道为什么,但是当我想改变我的弹出背景(我在 python 中创建,而不是 kivy)时,我改变了整个屏幕的背景,除了我的实际弹出窗口。我的代码看起来像这样(分解了很多):

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)

【问题讨论】:

    标签: python popup kivy background-color


    【解决方案1】:

    其实我觉得这很简单。我的回答使问题复杂化了。我相信您只需要添加以下行:

    self.chosePop.opacity = 0.5
    

    在您创建 Popup 之后。

    【讨论】:

    • 啊,太棒了,谢谢!!这就是我要找的:))
    【解决方案2】:

    在你的Popup中,你看到的大部分是Labels的背景。一个Labeltitle,另一个是你的ChooseBoxLabel。您可以轻松调整ChooseBoxLabel 的背景颜色,方法是使用带有kv 规则的自定义类为背景创建彩色Rectangletitle 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 时才可见。 kv 中的Label 规则为titlechooseBoxLabel 提供背景颜色,但它会影响App 中的每个Label

    【讨论】:

    • 感谢您的帮助 :) 一切都按预期工作,但这似乎不符合我的目的。此外,我想让整个弹出背景 50% 透明,使用您的方法,我似乎只是降低了顶部颜色的不透明度,而其背后仍有背景。必须有一种方法可以从 python 端正确设置整个弹出窗口的 backgroundcolor 和 background_normal .. 但是非常感谢您抽出宝贵的时间!
    猜你喜欢
    • 2019-12-21
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多