我正在尝试创建一些主题。我的程序当前有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和属性窗口小部件的颜色(例如,所有标签的文本颜色)?
预先感谢
注意-它不适用于前景色或类似的任何颜色设置。
答案 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类的实例,它不是一个与第二个类不同的类。