admin / 23.02.2018

Android разработка с Python и Kivy

.

Kivy — интересный проект, который позволяет делать кроссплатформенные GUI приложения, включая мобильные. По слухам. Я решил выяснить можно ли использовать его для создания маленьких приложений на питоне.

Android разработка с Python и Kivy

В этой серии статей я попробую поисследовать Kivy на примере клона "конструктора слов" — одного из упражнений для LingvoLeo.

Эта серия — не учебник, а исследовательский лог моих попыток. В результате я планирую получить собранные приложения для трех платформ минимум: Windows, Mac, Android. Будет здорово, если я соберу еще и iOS версию. В качестве основной платформы для разработки я использую Mac. Так что, все инструкции по установке и настройке окружения будут для этой операционной системы.

Установка

Под мак есть два способа поставить Kivy: скачать бандл или установить зависимости из homebrew, а kivy поставить с помощью pip.

Первый способ (быстрый):

  1. Скачать с http://kivy.org/#download Kivy2.7z (использует системный питон 2.7) или Kivy3.7z (включает в себя Python 3.5)

  2. Распаковываем архив

  3. Копируем в приложения

    sudo mv Kivy3.app /Applications/Kivy.app
  4. Создаем симлинк

    ln -s /Applications/Kivy.app/Contents/Resources/script /usr/local/bin/kivy

Минус этого способа установки в том, что создается только одно виртуальное окружение на все Kivy проекты. Для маленьких проектов такой способ подойдет, для больших — сомневаюсь. Так что лучше сразу ставить фремворк в свое окружение.

Второй способ (правильный):

Подразумеваю, что вы пользуетесь pyenv и pyenv-virtualenv.

Первым делом ставим зависимости.

brew install sdl2 sdl2_image sdl2_ttf sdl2_mixer gstreamer

Ставим свежий питончик.

Иногда установка падает:

zipimport.ZipImportError: can't decompress data; zlib not available

В этом случае поможет:

Как только свежий питон стоит, создаем виртуальное окружение для нашего проекта.

pyenv virtualenv 3.5.1 WordConstructor

Активируем созданное окружение

pyenv activate WordConstructor

Ставим Cython

pip install -I Cython==0.23

Ставим Kivy

USE_OSX_FRAMEWORKS=0 pip install kivy

Проверим, что все работает. Создадим файлик main.py в папке с проектом с таким содержимым:

fromkivy.appimportAppfromkivy.uix.widgetimportWidgetclassWordConstructorGame(Widget):passclassWordConstructorApp(App):defbuild(self):returnWordConstructorGame()if__name__=='__main__':WordConstructorApp().run()

Запустим

Если открылось окно с заголовком WordConstructor, все установилось и работает как надо.

PyCharm

Теперь настроим проект в пайчарме.

В Preferences выбираем Project interpreter соответствующий нашему виртуальному окружению.

Для описания интерфейсов в Kivy используется свой язык Kv Design Language. Неплохо бы добавить для него подсветку синтаксиса и автокомплит.

  1. Для этого качаем https://github.com/Zen-CODE/kivybits/blob/master/IDE/PyCharm_kv_completion.jar?raw=true
  2. В PyCharm в меню File -> Import Settings импортируем этот файл.
  3. Удостоверившись, что стоит галочка File types, нажимаем OK.
  4. Перезагружаем PyCharm и наслаждаемся результатом.

С настройкой все.

В следующей статье обсудим более практические вопросы.



.

Вот короткий код, который я собрал вместе, но он не работает, потому что он блокирует вызов get().

Итак, что вы действительно хотите сделать, это получить элементы из вашей очереди неблокирующим способом?

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

Я не знаю, что вы хотите делать с элементами, которые вы получаете из очереди, но если это короткие операции, которые не занимают много времени, вам не понадобится ничего больше. Например, вы могли бы использовать метод каждый кадр, ничего не делать, если очередь пуста или работать с данными, если вы что-то получите.

Пишем «Змейку» под Android на Python и Kivy

Нет блокировки и не вступать в ваши собственные потоки.

Вы также можете создать свой собственный поток и запустить в нем блокирующий код, который является общим способом решения проблем с блокировкой, особенно задач, которые нельзя разделить на короткие разделы, которые могут выполняться между кадрами. Я не знаю о деталях этого, но он должен просто включать использование потоков python как правило. Вы можете проверить источник kivy для примера, это может загрузить веб-источник в фоновом потоке.

Изменить: также ваш SourceQueue перепутан (вы переопределите его , чтобы создать новую очередь, которую вы не храните в любом месте), и ваше расписание часов имеет бессмысленный третий аргумент , который даже не определен, Я не знаю, что происходит здесь, это, вероятно, влияет на то, что вы пытаетесь сделать, но не имеет значения для моего общего ответа выше.

ответ дан inclement 10 мая '14 в 0:44

источникподелиться

I like to use Wingware’s IDE for coding in Python.

Android разработка с Python и Kivy

I am working through some sample applications with Kivy, a cross-platform Python GUI framework that can also create UIs for mobile. Anyway, getting Kivy set up in Wing is slightly confusing, so here’s a crash course:

  1. Download Kivy
  2. Unzip Kivy somewhere. In my case, I unzipped it here: C:\kivy1.7.2\
  3. Run kivy.bat which is in the directory you unzipped to. You should see something like the following

Now we’re ready to open up Wing. Once you have that open, start a new project. Then go to the Project menu and choose the Project Properties option, which is at the very bottom of the list. You should see something like the following:

Set the Python Executable option to your Kivy’s Python, which in my case was: c:\kivy1.7.2\Python\python.exe

Set the Python Path to C:\kivy1.7.2\kivy (or modify to match where you extracted Kivy to).

At this point, you should be able to import kivy in your environment, but you won’t be able to actually execute your kivy scripts. To get past that, you need to go to the bottom section of the Project Properties dialog and change the Environment setting drop-down to Add to inherited environment. Finally, you’ll want to copy the PATH information from the kivy.bat screen that you saw above into the textbox below the Environment setting. In my case, it looked something like this:

Except that it should all be on one line. Otherwise Wing will complain that each variable must be be in a var=value pair. Once you’ve got all this done, you can run a kivy script from within Wing. This circumvents the need to drag a Python file onto kivy.bat to run a kivy program.

FILED UNDER : IT

Submit a Comment

Must be required * marked fields.

:*
:*