Ответы пользователя по тегу Kivy
  • Как изменить label по id kivy?

    @bigburn
    Делаю неживое живым
    1. on_press: root.upd()
    2. self.ids['fer'].text = ':<'

    from kivy.lang import Builder
    from kivy.app import App
    from kivy.uix.label import Label
    from kivy.uix.button import Button
    from kivy.uix.boxlayout import BoxLayout
    
    Builder.load_string("""
    <Gex>:
      orientation: 'vertical'
      Button:
        text: 'UwU'
        on_press: root.upd()
      Label:
        id: fer
        text: ' '
    """)
    class Gex(BoxLayout):
     def upd(self):
      self.ids['fer'].text = ':<'
    
    class FakeApp(App):
     def build(self):
      return Gex()
    
    FakeApp().run()
    Ответ написан
  • Kivy: как правильно создать RecycleView с чекбоксами?

    @bigburn Автор вопроса
    Делаю неживое живым
    решение от tshirtman
    from kivy.lang import Builder
    from kivy.app import App
    from kivy.properties import ListProperty, NumericProperty
    
    KV = '''
    #:import RGBA kivy.utils.rgba
    
    <Row@BoxLayout>:
        text: ''
        rv_key: 0
    
        CheckBox:
            active: root.rv_key in app.current_selection
            on_active: app.select_row(root.rv_key, self.active)
    
        Label:
            text: root.text
    
    FloatLayout:
        RecycleView:
            size_hint: .8, .8
            pos_hint: {'center': (.5, .5)}
            data: app.data
            viewclass: 'Row'
    
            canvas.before:
                Color:
                    rgba: RGBA('#212121')
    
                Rectangle:
                    pos: self.pos
                    size: self.size
    
            RecycleBoxLayout:
                orientation: 'vertical'
                size: self.minimum_size
                size_hint_y: None
                default_size_hint: 1, None
                default_size: 0, 50
    '''
    
    
    class TestApp(App):
        data = ListProperty()
        current_selection = ListProperty([])
    
        def build(self):
            self.data = [
                dict(
                    text='key {}'.format(i),
                    rv_key=i,
                )
                for i in range(100)
            ]
            return Builder.load_string(KV)
    
        def select_row(self, rv_key, active):
            if active and rv_key not in self.current_selection:
                self.current_selection.append(rv_key)
            elif not active and rv_key in self.current_selection:
                self.current_selection.remove(rv_key)
    
    
    if __name__ == '__main__':
        TestApp().run()

    Ссылка на гист
    Ответ написан
  • Можно ли задать функцию для кнопки, не нажимая ее?

    @bigburn
    Делаю неживое живым
    Если еще актуально, то, например, так:

    import kivy
    from kivy.app import App
    from kivy.lang import Builder
    
    KV = """
    BoxLayout
        Button
            text: "click me!"
            on_press: b2.text='thank you!'
        Button
            id: b2
    """
    
    class MyApp(App):
        def build(self):
            self.root = Builder.load_string(KV)
    
    MyApp().run()
    Ответ написан
  • Игры на python и kivy, чем пользоваться?

    @bigburn
    Делаю неживое живым
    Пара мыслей по поводу Kivy:
    Для начала советую вдумчиво изучить гитхаб.
    Чтобы вообще понять, какой минимум (именно минимум) можно достичь на киви и как устроено там все внутри.
    Там конечно много шлака и сырых приложений как результат kivy конкурсов (типа калькуляторов и вариаций flappy bird), но местами попадаются довольно достойные примеры.

    Что касается игр, то это в основном 2D, правда я видел одного безумного стримера, который написал RPG 3D с элементами физики, уровнями и тд (хотя дизайн ну очень на любителя, но тем не менее).

    Сложность в том что многие вещи нужно будет писать самому
    В частности kivy совсем не для ленивых 3D разработчиков (из официальных примеров по-моему только вращающаяся голова обезьяны).
    Поэтому будьте готовы пройти через тернии к кватернионам.

    на данный момент для kivy нет вообще такого понятия как ассеты, как на unity, В общем, многие вещи нужно будет поднимать с нуля.

    2D представлен уже гораздо более широко, то есть можно с каждого репозитория стягивать по функции/классу и по идее получить довольно годный продукт. Это конечно потребует времени.

    Самое главное, на что ни в коем случае не надо обращать внимание — это на убогость дизайна элементов kivy по умолчанию (кнопки цвета хаки, которые при нажатии выделяются синим, не должны дизморалить). Есть например kivymd, но можно сделать еще лучше, богаче и умнее.

    С другой стороны обнадеживают две вещи:

    1. просто посмотрите, как лаконичен в среднем код для приложений на kivy. Это значит будет очень сложно запутаться. Если понять что к чему, то писать такой код будет определенно в радость.
    И да, в отличие от того же Unity, в качестве компенсации удобства и скорости разработки игр, kivy может похвастаться гораздо большей гибкостью. в плане гибкости можно часто услышать определение "пластилиновый фреймворк" — что хотите то лепите.

    2. Киви поддерживает Glsl.
    Это то, с помощью чего делают крутые шейдеры в играх.
    То есть если подучить glsl, то в киви можно делать реально бомбезные по красоте вещи.
    Можно написать например те же даймондс, которые не будет уступать по дизайну топовым на Google Play.

    Можно писать всякие красивые UI элементы, не уступающие CSS и тд.

    3. Кроссплатформенность.
    Можно запускать даже на Андроиде, по сути это то, почему я начал его изучать.
    В том числе релизить свои игры и приложения в Play Маркете и если продукт действительно стоящий, то это дело монетизировать.

    В общем, по крайней мере обратить внимание считаю определённо стоит
    Ответ написан