[英]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.