繁体   English   中英

在python中更改kivy popup小部件背景

[英]change kivy popup widget background in python

我有一个kivy程序,其中有一个“ sqlite”数据库,其中包含高尔夫比赛的详细信息,该数据库通过标准的Pop-up函数显示信息和警告消息-pop_mess()出于测试目的,我在一个函数中打开了一个替代的“ testing”数据库- set_test_db()。 完成此操作后,我想更改弹出窗口的背景颜色,以警告用户未使用主数据库。

我试图做到这一点(“ set_test_db”结尾的代码)。 但是,尽管该例程正确地检索了当前背景色,但它不会更改它。

有人可以指出我的解决方案的方向。 编码方法可以很好地用于更改窗口小部件的文本属性。 (类似的问题通常是指文本属性)。 我已经使用列表和元组作为颜色值。

在.ky文件中

<CustomPopup>:
    popup_message: popup_message
    size_hint: .98, .75
    id: popup_id
    title: "Casual and Ancient"
    title_align: 'center'
    title_color: 1,.5,.3,1
    BoxLayout:
        id: contentbox
        orientation: 'vertical'
        TextInput:
            id: popup_message
            color: .3,.4,1.0,1
            background_color: [.7,1.0,.2,1]
            text: "text message goes here"
            font_size: 16
            font_name: 'RobotoMono-Regular'

…..
CaaRoot:
<CaaRoot>:
    orientation: 'lr-tb'
    padding: 10
    etc
    ...

在main.py中

(自我= CaaRoot)...

def pop_mess(self,message):
        p_up=CustomPopup()
        lab=p_up.ids['popup_message']
        lab.text=message
        p_up.open()

...

def set_test_db(self):
        # on button in CaaRoot
        # open test data base instead of real
        if self.db != None:
            print 'Cannot Open Test Data Base - already running'
        else:
    # open ‘test’ database
    # set background colour of popup to warn user.

        fn='/home/.... caatestdb.db
        self.op_db(fn)
        self.testing='TEST database'

        p_up=CustomPopup()
        lab=p_up.ids['popup_message']
        x=lab.background_color

        new_col=[.9,.3,.3,1]
        lab.background_color=new_col

        self.pop_mess('color set to : '+str(new_col)+ '  was : '+str(x))

弹出窗口显示

设置为:[0.9,0.3,0.3,1]的颜色为:[0.7,1.0,0.2,1]

(背景仍然设置为[0.7、1.0、0.2、1])

看看kivymd ,它很好地解决了此类问题。 从本质上讲,它是基于Google的Material Design的非常漂亮的kivy模板。 对我来说,这使所有着色材料和外观都变得容易得多,尤其是因为我不是设计师,而是程序员。

该演示还有非常完整的示例集,包括弹出窗口。

在进一步调查我的问题时,我遇到了类似的问题(“ Kivy Popup的变化背景”)

给出的解决方案是“非直觉的”,涉及“继承的” Canvas元素(?)的属性,这一事实使我意识到(记住?),而不是某些小部件没有完整的可修改属性。

我正在检索的“ background_color”属性是从Canvas继承的属性,无法轻易更改。

我通过在每次希望使用“弹出”窗口小部件而不是修改现有窗口小部件时都避免了该问题。 我仍然不能(简单地)更改弹出窗口的background_color,但是我可以更改父元素的背景颜色,以便用户的眼睛立即看到不同的东西。 调用弹出消息功能时,我也可以更改文本颜色。

def pop_mess(self,message,colour=(.9,.6,.9,1)):
    #
    # text color can ve overridden by the 'colour' parameter
    # self.backc can be set as required to set the  color behind the 
    #    popup depending on circumstances


popup=Popup(title='Casual & Ancient', \
        content=Label(text=message,color=colour,\
                      font_name = 'RobotoMono-Regular'),\
                size_hint=(.98,.75),background_color=self.backc)


    popup.open() 

我不确定分析是否正确或可能会有一些副作用,但似乎行得通(而且编写起来有些简单)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM