Ответы пользователя по тегу Kivy
  • Почему auto-py-to-exe долго собирает приложение и что означает TRACE?

    Vindicar
    @Vindicar
    RTFM!
    TRACE - обычно супер-детальные сообщения о ходе работы программы. "Сейчас я делаю вот это".
    Уровень подробности логов обычно настраивается.
    Ответ написан
    2 комментария
  • Python 3 kivy. Как сохранить состояние программы?

    Vindicar
    @Vindicar
    RTFM!
    Посмотри на вопрос с другой стороны.
    Состояние виджетов наверняка определяется чем-то другим - состоянием приложения, которое описывается в терминах той предметной области, с которой ты имеешь дело.
    Опиши состояние приложения как класс, научись сохранять/загружать его без привязки к GUI.
    Потом научись создавать GUI на основании экземпляра этого класса.
    А потом меняй экземпляр этого класса при операциях с GUI.
    Почитай про паттерн Model-View-Intent, он примерно про это.
    Ответ написан
    1 комментарий
  • Как указывать пути к файлу в Kivy?

    Vindicar
    @Vindicar
    RTFM!
    file = open('Файл.txt', 'r', encoding = 'utf-8'), то есть работаю с файлом, который находится в папке с main.py,

    Неправильно. Ты работаешь с файлом, который находится в текущем рабочем каталоге, так как ты указал относительный путь (т.е. не от корня диска).
    Текущий рабочий каталог может совпадать или не совпадать с каталогом, в котором находится скрипт. Это зависит от поведения программы, которая скрипт запускает, будь то проводник винды, командная строка или ещё что. Кроме того, программа может менять свой текущий рабочий каталог при желании.
    Иными словами, ты не контролируешь, какой будет рабочий каталог на момент запуска программы - разве что поменяешь его самостоятельно.
    Так что лучше указывать абсолютный путь. Самый простой способ - получить из sys.argv[0] путь к скрипту и подняться на уровень выше. Вот тогда получишь путь к папке где лежит твой скрипт. И от этого пути уже отталкивайся.
    Операции с путями удобнее всего делать с помощью pathlib, или по старинке с помощью os.path.
    Ответ написан
    Комментировать
  • Логика столкновения kivy python?

    Vindicar
    @Vindicar
    RTFM!
    Ну для начала, зачем удалять и пересоздавать отдельных птиц, если можно просто "телепортировать" их к другому краю экрана?
    Кроме того, если я верно понял, у тебя delete_birds() отработает сразу, не дожидаясь конца анимации, так как метод start() не выполняет анимацию - он только планирует её постепенное выполнение в ходе дальнейшей работы окна. Используй событие on_complete в твоём объекте Animation.
    Подробности, как всегда, в документации.
    Ответ написан
    1 комментарий
  • Как сделать запись в файл после определенного метода?

    Vindicar
    @Vindicar
    RTFM!
    Ну самый лобовой способ - изменить файл-шаблон так (сокращено):
    class MainApp(App):
        def build(self):
            main_layout = FloatLayout()
            # INSERT CODE HERE
            return main_layout
     
    if __name__ == '__main__':
        app = MainApp()
        app.run()

    Тогда можно будет сделать просто
    with open('file.py', 'rt', encoding='utf-8') as src:
        data = src.read()
    with open('file2.py', 'wt', encoding='utf-8') as dest:
        dest.write(data.replace('# INSERT CODE HERE', 'тут твой код'))

    Разумеется, строка # INSERT CODE HERE не должна встречаться в других местах файла-шаблона.
    Также подразумевается, что файл-шаблон сам по себе, и не изменяется программно - вместо этого результат записывается в другой файл, который уже используется.
    Ответ написан
    6 комментариев
  • Почему вызов функции вызывает ошибку?

    Vindicar
    @Vindicar
    RTFM!
    > on_press = BoxOneP()
    Ты присваиваешь параметр on_press результат вызова функции BoxOneP. Которая возвращает None.

    Может, всё-таки имелось ввиду просто "on_press=BoxOneP"?

    И да, что значит "ломает приложение"? Текст ошибки со стектрейсом с студию.
    Ответ написан
    2 комментария
  • Как заменить текст в виджете?

    Vindicar
    @Vindicar
    RTFM!
    Нужно сохранять где-то ссылку на объект кнопки, разуемеется.
    Ответ написан
    Комментировать
  • Почему Kivy выдает ошибку при запуске программы?

    Vindicar
    @Vindicar
    RTFM!
    Гугл нашел issue на гитхабе kivy. Последний пост от февраля этого года указывает на необходимость добавить пару каталогов в переменную окружения PATH, примерно так.
    # you must add to the path the location of your SDL2 binaries
    os.environ['PATH'] += ';' + os.path.expandvars('%AppData%\\Python\\share\\glew\\bin')
    os.environ['PATH'] += ';' + os.path.expandvars('%AppData%\\Python\\share\\sdl2\\bin')


    Однако выше упоминается, что это необходимо только если питон установлен по нестандартному пути. Также стоит проверить, установлен ли питон от админа (для всех пользователей) или нет.
    Ответ написан
    Комментировать
  • Почему не открывается файл?

    Vindicar
    @Vindicar
    RTFM!
    Никогда не работал с этим фреймворком, но есть подозрение.
    a.on_selection = self.selected(a.selection)
    ты присваиваешь свойству on_selection возвращаемое значение метода selected(). Так как метод ничего не возвращает, это None. Т.е. ты говоришь, что никакой реакции на on_selection не надо делать.
    Подозреваю, что правильно будет
    a.on_selection = self.selected
    и обрати внимание, что нет скобок! Вместо вызова метода мы передаём ссылку на него.

    Далее, можно было бы и самостоятельно догадаться в чём дело, но тебя сбило с толку вот эта "обработка" исключений:
    try:
                self.ids.my_image.source = filename[0]
            except:
                pass

    Возьми хорошую железную линейку, и пару раз врежь себе по пальцам, чтобы запомнить что так делать не стоит никогда. Теперь вместо сколь-нибудь вменяемого сообщения об ошибке, по которому можно докопаться до её первопричины, программа просто молча не работает.
    Ответ написан