Kivy-如果满足条件,如何更改每个文本输入的颜色

时间:2019-11-21 20:48:26

标签: python kivy

我正在尝试创建一些主题。我的程序当前有4个班级/屏幕。我希望能够在满足条件的情况下更改所有屏幕的背景色。我试图更改所有文本输入的颜色,以至于白色,它们都是黑色。到目前为止,这是我的代码

Python:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmanager import ScreenManager, Screen

from kivy.clock import *
from kivy.core.window import Window
from kivy.uix.textinput import TextInput


class WeatherRoot(ScreenManager, BoxLayout):
    pass


class RegisterPage(Screen, BoxLayout):
    pass


class WeatherApp(App):
    pass

def iii(time):
    print("h")
    x = 1
    if x == 1:
        Window.clearcolor = (1, 1, 1, 0)
        TextInput.background_color = (1,1,1,0)

    pass

if __name__ == "__main__":
    Clock.schedule_once(iii)
    WeatherApp().run()

基维:

WeatherRoot:
<WeatherRoot>:
    RegisterPage:

<RegisterPage>:
    BoxLayout:
        padding: [100, 50, 100, 50]
        TextInput:
            font_size: 30
        TextInput:
            font_size: 30

更改TextInput颜色的代码不起作用。

背景为白色,但文字输入并非黑色

如果满足条件,如何使用python代码更改一般的TextInput和属性窗口小部件的颜色(例如,所有标签的文本颜色)?

预先感谢

注意-它不适用于前景色或类似的任何颜色设置。

1 个答案:

答案 0 :(得分:0)

似乎对象/实例和类的概念没有不同。通过使用TextInput.background_color = (1,1,1,0),您可以添加或修改TextInput类(而不是基于TextInput类创建的对象/实例)的“ background_color”属性。

如果要修改TextInputs的属性(也就是基于TextInput类创建的实例/对象),则必须通过父级使用kivy方法访问这些对象:

def iii(time):
    x = 1
    if x == 1:
        Window.clearcolor = (1, 1, 1, 0)
        root = App.get_running_app().root # WeatherRoot instance
        screen = root.screens[0] # RegisterPage instance        
        box_layout = screen.children[0] # BoxLayout instance
        for child in box_layout.children: # childs of box_layout
            if isinstance(child, TextInput): # verify that the child is a TextInput
                child.background_color = (1,1,1,0)

我认为您已经推断出,就Window而言,它的行为类似于TextInput,但是它们并不相同,因为第一个是WindowBase类的实例,它不是一个与第二个类不同的类。