如何在Kivy

时间:2017-02-07 20:21:46

标签: python kivy

我需要一个程序,我正在尝试使用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窗口用一个空白的黑屏替换自己。 我认为我做错了是因为我没有刷新窗户或其他东西,但我不知道该怎么做。]

非常感谢

2 个答案:

答案 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

Sample

注意: 玩颜色:我的 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
            )