Как настроить style.kv в Кивах - PullRequest
0 голосов
/ 15 октября 2018

Согласно Kivy Doc , я могу настроить внешний вид приложения kivy, создав локальный файл style.kv, который будет использоваться вместо стандартного.Поэтому я отредактировал исходный файл, изменив поведение виджета «Кнопка» следующим образом:

<-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__':
    res_path = join(dirname(abspath(__file__)), "custom")
    resource_add_path(res_path)
    print("find ", resource_find("data/style.kv"))
    MainApp().run()

Во время выполнения локальный путь style.kv хорошо печатается.

Вся помощь очень ценится!

1 Ответ

0 голосов
/ 15 октября 2018

Несмотря на то, что в документации говорится, что вы можете настроить kivy именно так, как вы пытались, это не похоже на работу.Однако вы можете заставить его работать, просто загрузив ваш измененный style.kv, используя kivy.lang.Builder.Например:

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...