在Kivy看不见画布指令

时间:2016-06-16 16:48:34

标签: python python-3.x kivy

我想创建一个TextInput并修改其画布,使其背景为白色RoundedRectangle。我让background_color透明了,但我在TextInput后面看不到那个矩形。
我试图改用canvas.beforecanvas.after。两者似乎都导致了一件事:预期的Rectangle覆盖了光标和文本。虽然这可以用于canvas.after,我认为canvas.before不会涵盖任何东西?如何通过画布说明为TextInput制作背景?

以下是代码:

from kivy.base import runTouchApp
from kivy.lang import Builder
from kivy.uix.textinput import TextInput

Builder.load_string('''
<Test>:
    canvas:       # no rectangle this way
        Color:
            rgba: 1, 1, 1, 1
        RoundedRectangle:
            pos: self.pos
            size: self.size
    background_color: 1, 1, 1, 0
''')

class Test(TextInput):
    pass

runTouchApp(Test())

1 个答案:

答案 0 :(得分:0)

简单!你在canvas中设置了Color,它被设置为(某些?)其他组件(可能直接通过OpenGL)。因此,您必须“取消设置”它 - 或者更好地说将其设置为您已访问的默认Color

from kivy.lang import Builder
from kivy.base import runTouchApp
from kivy.uix.textinput import TextInput
Builder.load_string('''
<Test>:
    canvas.before:
        Color:
            rgba: 1, 0, 0, .5
        Rectangle:
            pos: self.pos
            size: self.size
        Color:
            rgba: root.foreground_color
    background_color: 1,1,1,0
''')
class Test(TextInput): pass
runTouchApp(Test())

您已在默认TextInput中设置了颜色,因此您可以使用root.

访问它们

还有更多功能可以使用background_*属性。如果需要(手机),制作带圆角的图像可能会更好地提高性能,只需设置这些属性就可以在它们之间切换,因为TextInput会自动处理切换。 / p>