我需要一个程序,我正在尝试使用kivy和python 3进行编码,但是我对两者都比较新。 在我的程序中我需要设置两种不同的背景颜色,用户可以在它们之间切换(夜间模式和白天使用的模式)
#globalvariable
backgroundcolour = [50, 50, 50]
class MainScreen(Screen):
rgb = StringProperty()
rgb = backgroundcolour
def changebackground(self):
self.canvas.clear()
backgroundcolour = [55, 5, 99]
print("DONE")
Kivy档案:
<MainScreen>:
name: 'main'
canvas:
Color:
rgb: root.rgb
然而,在我运行changebackground子程序后,我得到的只是我的kivy窗口用一个空白的黑屏替换自己。 我认为我做错了是因为我没有刷新窗户或其他东西,但我不知道该怎么做。]
非常感谢
答案 0 :(得分:1)
[LayoutRenderer("custom-value")]
public class MyCustomRenderer : AspNetLayoutRendererBase
{
protected override void DoAppend(StringBuilder builder, LogEventInfo logEvent)
{
var httpRequest = HttpContextAccessor?.HttpContext?.TryGetRequest();
if (httpRequest == null)
return;
builder.Append(httpRequest.Something); //TODO
}
}
在此部分之后,您必须绘制一些将覆盖窗口小部件背景的内容:
canvas:
Color:
rgb: root.rgb
或在Rectangle:
size: self.size
pos: self.pos
:
changebackground()
如果您打算在不经常更改颜色样式时使用它,这可能更为理想。最好的方法是使用with self.canvas:
Color(rgb=self.rgb) # rgba might be better
Rectangle(size=self.size, pos=self.pos)
,特别是如果你有一个绘制内容的小部件(例如canvas.before
)。
此外,颜色在 0 - 1 范围内,因此你的颜色将是某种非常明亮的紫色东西。只需注意:这只会更改小部件的背景,因此您的窗口背景仍将是默认背景(目前为黑色)。要改变这一点,您需要使用Window.clearcolor
。
答案 1 :(得分:0)
这是一个关于如何在布局上放置背景的纯python代码,没有Kivy设计语言
<块引用>应用类代码不包括
供以后参考:
from kivy.uix.gridlayout import GridLayout
from kivy.graphics.vertex_instructions import Rectangle
from kivy.graphics.context_instructions import Color
from kivy.uix import button
class MyLayout(GridLayout):
def __init__(self, **kwargs):
super(MyLayout, self).__init__(**kwargs)
self.cols = 1
self.bind(
size=self._update_rect,
pos=self._update_rect
)
with self.canvas.before:
Color(.20, .06, .31, 1)
self.rect = Rectangle(
size=self.size,
pos=self.pos
)
def _update_rect(self, instance, value):
self.rect.pos = instance.pos
self.rect.size = instance.size
注意: 玩颜色:我的 rgb 值是 (46, 14, 71),然后将它除以 255 (.20, .06, .31, 1)。最后一个值是 alpha,1 是 100%
希望能帮到大家。只需投票以帮助其他也在寻找答案的人。
<块引用>解决您的问题
添加此代码初始化:
self.daylightBtn = button.Button(text="Day Light")
self.daylightBtn.bind(on_press=self.daylight_bg)
self.nightlightBtn = button.Button(text="Night Light")
self.nightlightBtn.bind(on_press=self.nighlight_bg)
self.add_widget(self.daylightBtn)
self.add_widget(self.nightlightBtn)
按钮事件:
def daylight_bg(self, instance):
with self.canvas.before:
Color(1, 1, 1, 1)
self.rect = Rectangle(
size=self.size,
pos=self.pos
)
def nighlight_bg(self, instance):
with self.canvas.before:
Color(0, 0, 0, 1)
self.rect = Rectangle(
size=self.size,
pos=self.pos
)