Ответы пользователя по тегу Python
  • Как изменить 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()
    Ответ написан
    Комментировать
  • Можно ли получить globals() для другого модуля?

    @bigburn Автор вопроса
    Делаю неживое живым
    похоже, modulename.__dict__
    - то, что нужно.
    Ответ написан
    Комментировать
  • Есть ли способ не выполнять выражения внутри тела with?

    @bigburn Автор вопроса
    Делаю неживое живым
    похоже, нашел один способ
    import sys
    import inspect
    
    class My_Context(object):
        def __init__(self,mode=0):
            """
            if mode = 0, proceed as normal
            if mode = 1, do not execute block
            """
            self.mode=mode
        def __enter__(self):
            if self.mode==1:
                print 'Met block-skipping criterion ...'
                # Do some magic
                sys.settrace(lambda *args, **keys: None)
                frame = inspect.currentframe(1)
                frame.f_trace = self.trace
        def trace(self, frame, event, arg):
            raise
        def __exit__(self, type, value, traceback):
            print 'Exiting context ...'
            return True
    
    with My_Context(mode=1):
        print 'Executing block of code ...'


    написан на 2 питоне, но на 3 должно быть легко переписать.
    mode=1 игнорирует выполнение тела with блока.
    Кстати, советуют не использовать такое.

    UPD:
    вариант для python3

    import sys
    
    class SkipWithBlock(Exception):
        pass
    
    
    class SkipContextManager:
        def __init__(self, skip = True):
            self.skip = skip
    
        def __enter__(self):
            if self.skip:
                sys.settrace(lambda *args, **keys: None)
                frame = sys._getframe(1)
                frame.f_trace = self.trace
    
        def trace(self, frame, event, arg):
            raise SkipWithBlock()
    
        def __exit__(self, type, value, traceback):
            if type is None:
                return  # No exception
            if issubclass(type, SkipWithBlock):
                return True  # Suppress special SkipWithBlock exception
    
       
    with SkipContextManager():  
        print('In the with block')  # Won't be called
    
    print('Out of the with block')
    Ответ написан
  • 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 Маркете и если продукт действительно стоящий, то это дело монетизировать.

    В общем, по крайней мере обратить внимание считаю определённо стоит
    Ответ написан
    2 комментария
  • Git + Google Colab = No module что упущено при клонировании репозитория?

    @bigburn Автор вопроса
    Делаю неживое живым
    В репозитории имеется файл layers.
    все работает, таким образом:

    !git clone https://github.com/tomlepaine/fast-wavenet.git
    %cd fast-wavenet/wavenet


    А не просто %cd fast-wavenet
    Вторая ячейка:

    from time import time
    from utils import make_batch
    from models import Model, Generator
    from IPython.display import Audio
    %matplotlib inline


    Здесь и далее просто удаляем везде где есть 'wavenet.'
    Ответ написан
    Комментировать