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

Posted

技术标签:

【中文标题】Kivy - 如果满足条件,如何更改每个文本输入的颜色【英文标题】:Kivy - How to change the colour of every text input if a condition is met 【发布时间】:2020-03-17 21:25:04 【问题描述】:

我正在尝试在 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 和属性小部件的颜色(例如所有标签的文本颜色)?

提前致谢

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

【问题讨论】:

【参考方案1】:

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

如果您想修改 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 类的实例,它不是与第二个不同的类。

【讨论】:

非常感谢。假设这也适用于其他小部件是否正确?例如使用按钮或下拉菜单? @JeffBanks 这取决于每种情况,我唯一能告诉你的就是:1) 复习你的 OOP 概念(如果没有,请参加课程),2) 复习 kivy 文档, 3) 查看官方的 kivy 教程。 另外,如果我希望在多个屏幕/类中的输入框发生这种情况,我应该怎么做?我会遍历 root.screens 吗? @JeffBanks 是的,我建议您查看我上面指出的内容,因为由于您的无知,我想您有数千个问题,但不幸的是,SO 的 cmets 不是正确的地方。 @JeffBanks 最后,如果对您有帮助,请不要忘记将答案标记为正确,如果您不知道该怎么做,请查看tour

以上是关于Kivy - 如果满足条件,如何更改每个文本输入的颜色的主要内容,如果未能解决你的问题,请参考以下文章

如果在 kivy 文件中定义了屏幕管理器,如何在 Python 中更改屏幕?

Kivy:无法从另一个类更新文本输入值

更改 Kivy 中的弹出文本

如何将文本输入值添加到kivy python中字典中的值?

如何在 kivy python 中的标签、文本输入和其他小部件中添加标题

更改 Kivy 小部件部分文本的颜色