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

Python Kivy-如果满足条件,如何更改每个文本输入的颜色,python,kivy,Python,Kivy,我正在尝试在kivy中创建一些主题。我的程序目前有4个类/屏幕。我已经设法能够改变所有屏幕的背景颜色,如果条件得到满足。我试着改变所有文本输入的颜色,因为它们是白色的,它们是黑色的。这是到目前为止我的代码 Python: from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.uix.screenmanager import ScreenManager, Screen from kivy.clock

我正在尝试在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:
:
注册页面:
:
盒子布局:
填充:[100,50,100,50]
文本输入:
字体大小:30
文本输入:
字体大小:30
更改文本输入颜色的代码无效

背景是白色的,但文本输入并不像您看到的那样是黑色的

如果满足条件,我如何使用python代码更改TextInput和properties小部件的颜色(例如,所有标签的文本颜色)

提前谢谢


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

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

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

def iii(时间):
x=1
如果x==1:
Window.clearcolor=(1,1,1,0)
root=App.get_running_App().root#WeatherRoot实例
screen=root.screens[0]#注册表页实例
box_layout=screen.children[0]#BoxLayout实例
对于框_布局中的子项。子项:#框_布局中的子项
如果isinstance(子项,TextInput):#验证子项是否为TextInput
child.background_color=(1,1,1,0)

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

非常感谢。假设这也适用于其他小部件是否正确?例如,使用按钮或下拉菜单?@JeffBanks这取决于每种情况,我唯一能告诉你的是:1)回顾你的OOP概念(如果你没有),2)回顾kivy文档,3)回顾kivy官方教程。此外,如果我想在多个屏幕/类中的输入框中实现这一点,我应该怎么做?我可以在root.screens上迭代吗?@JeffBanks是的,我建议你回顾一下我在上面指出的内容,因为你不知道我想你有数千个问题,但不幸的是,SO的评论不是正确的地方。@JeffBanks最后,如果答案对你有帮助,请不要忘记将其标记为正确,如果你不知道怎么做,那么检查
WeatherRoot:
<WeatherRoot>:
    RegisterPage:

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