在python中更改kivy弹出窗口小部件背景

时间:2017-04-14 22:41:53

标签: python properties kivy

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

我试过这样做(代码在#set; test_test_db'结束时)。但是,虽然例程正确地检索当前背景颜色,但它不会改变它。

有人能指出我的解决方案。编码方法适用于更改窗口小部件的文本属性。 (类似的问题通常是指文本属性)。我使用过list和amp;用于颜色值的元组。

在.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中

(self = 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])

2 个答案:

答案 0 :(得分:0)

看看kivymd,它可以很好地解决这类问题。对于基于Google's Material Design的kivy来说,它基本上是一个非常优雅的模板。 对我而言,它使所有着色的东西和外观变得更加容易,特别是因为我不是设计师而是程序员。

演示还有一套非常完整的例子,包括弹出窗口。

答案 1 :(得分:-1)

在进一步调查我的问题时,我遇到了类似的问题(改变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() 

我不完全确定分析是否正确或可能存在一些副作用,但似乎工作正常(并且编码更简单)