How to customize style.kv in Kivy(如何在 Kivy 中自定义 style.kv)
问题描述
根据 Kivy Doc,我可以通过创建将使用而不是标准的本地 style.kv 文件来自定义 kivy 应用程序外观.所以我编辑了原始文件,通过修改按钮小部件的行为,如下所示:
According to Kivy Doc, I can customize a kivy app look, by creating a local style.kv file that will be use instead of standard. So I edited the original file, by modifying, the behavior of the Button widget like this :
<-Button,-ToggleButton>:
canvas:
Color:
rgba: [1, 0, 0, 1] if self.state == 'normal' else [0, 0, 1, 1]
Rectangle:
pos: self.pos
size: self.size
Color:
rgba: 1, 1, 1, 1
Rectangle:
texture: self.texture
size: self.texture_size
pos: int(self.center_x - self.texture_size[0] / 2.), int(self.center_y - self.texture_size[1] / 2.)
我希望按钮背景在单击时变为红色并变为蓝色.但是什么也没发生,并且应用了默认行为.
I was hoping that buttons background's become red and change to blue when clicked. But nothings happen, and the default behavior was applied.
这是我的主文件的内容
from os.path import abspath, dirname, join
from kivy.app import App
from kivy.resources import resource_add_path, resource_find
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
class MainLayout(BoxLayout):
def __init__(self, **kwargs):
super(MainLayout, self).__init__(**kwargs)
self.add_widget(Button(text="Button1"))
self.add_widget(Button(text="Button2"))
class MainApp(App):
def build(self):
return MainLayout()
if __name__ == '__main__':
res_path = join(dirname(abspath(__file__)), "custom")
resource_add_path(res_path)
print("find ", resource_find("data/style.kv"))
MainApp().run()
在运行时,style.kv 的本地路径打印良好.
At runtime, the local path of the style.kv is well printed.
非常感谢所有帮助!
推荐答案
即使 documentation 说您可以完全按照您尝试的方式自定义 kivy,但它看起来不起作用.但是,您可以通过使用 kivy.lang.Builder 加载修改后的 style.kv 来使其工作.例如:
Even though the documentation says that you can customize kivy exactly the way you have attempted, it does not look like it works. However, you can get it to work by just loading your modified style.kv using kivy.lang.Builder.
For example:
from kivy.lang import Builder
Builder.load_string('''
<-Button,-ToggleButton>:
canvas:
Color:
rgba: [1, 0, 0, 1] if self.state == 'normal' else [0, 0, 1, 1]
Rectangle:
pos: self.pos
size: self.size
Color:
rgba: 1, 1, 1, 1
Rectangle:
texture: self.texture
size: self.texture_size
pos: int(self.center_x - self.texture_size[0] / 2.), int(self.center_y - self.texture_size[1] / 2.)
''')
from os.path import abspath, dirname, join
from kivy.app import App
from kivy.resources import resource_add_path, resource_find
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
class MainLayout(BoxLayout):
def __init__(self, **kwargs):
super(MainLayout, self).__init__(**kwargs)
self.add_widget(Button(text="Button1"))
self.add_widget(Button(text="Button2"))
class MainApp(App):
def build(self):
return MainLayout()
if __name__ == '__main__':
MainApp().run()
这篇关于如何在 Kivy 中自定义 style.kv的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何在 Kivy 中自定义 style.kv
基础教程推荐
- 在同一图形上绘制Bokeh的烛台和音量条 2022-01-01
- 修改列表中的数据帧不起作用 2022-01-01
- 无法导入 Pytorch [WinError 126] 找不到指定的模块 2022-01-01
- PermissionError: pip 从 8.1.1 升级到 8.1.2 2022-01-01
- PANDA VALUE_COUNTS包含GROUP BY之前的所有值 2022-01-01
- 包装空间模型 2022-01-01
- 使用大型矩阵时禁止 Pycharm 输出中的自动换行符 2022-01-01
- 求两个直方图的卷积 2022-01-01
- 在Python中从Azure BLOB存储中读取文件 2022-01-01
- Plotly:如何设置绘图图形的样式,使其不显示缺失日期的间隙? 2022-01-01
