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 中更改屏幕?