【问题标题】:change kivy popup widget background in python在 python 中更改 kivy 弹出窗口小部件背景
【发布时间】:2017-09-11 05:18:32
【问题描述】:

我有一个 kivy 程序,它有一个“sqlite”数据库,其中包含高尔夫比赛的详细信息,它通过标准弹出功能 - pop_mess() 显示信息和警告消息 出于测试目的,我在一个函数中打开了另一个“测试”数据库——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])

【问题讨论】:

    标签: python properties kivy


    【解决方案1】:

    在进一步调查我的问题时,我遇到了类似的问题(Changing Background of Kivy Popup)

    给出的解决方案是“非直观”的,涉及“继承”的 Canvas 元素(?)的属性,这让我意识到(还记得吗?)有些小部件没有全部可修改属性。

    我检索的“background_color”属性是从 Canvas 继承的属性,不能轻易更改。

    我通过创建一个“弹出”小部件来避免这个问题,只要我想使用它而不是修改现有的小部件。我仍然不能(简单地)更改弹出窗口的背景颜色,但我可以更改父元素的背景颜色,以便用户的眼睛立即看到不同的东西。我也可以在调用弹出消息函数时更改文本颜色。

    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() 
    

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

    【讨论】:

      【解决方案2】:

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

      Demo还有非常完整的例子,包括弹窗。

      【讨论】:

      • 感谢您的链接。我克隆了“md”并尝试运行“厨房水槽”演示,但由于“ImportError: No module named recycleview”和“无法导入包 'kivymd.menu.MDDropdownMenu”而失败我认为我对kivy 的某些方面,尽管它可以满足我的需要。
      • RecycleView 在 Kivy 库中非常新,您可能需要从 Kivy-Garden 下载版本。看看还有其他一些不错的小部件。另一种可能性是克隆 1.9.2-dev。看看linkrecycleview 是在1.10版本中添加的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-02
      • 2014-12-26
      相关资源
      最近更新 更多