admin / 23.02.2018
.
Kivy — интересный проект, который позволяет делать кроссплатформенные GUI приложения, включая мобильные. По слухам. Я решил выяснить можно ли использовать его для создания маленьких приложений на питоне.
Содержание
В этой серии статей я попробую поисследовать Kivy на примере клона "конструктора слов" — одного из упражнений для LingvoLeo.
Эта серия — не учебник, а исследовательский лог моих попыток. В результате я планирую получить собранные приложения для трех платформ минимум: Windows, Mac, Android. Будет здорово, если я соберу еще и iOS версию. В качестве основной платформы для разработки я использую Mac. Так что, все инструкции по установке и настройке окружения будут для этой операционной системы.
Под мак есть два способа поставить Kivy: скачать бандл или установить зависимости из homebrew, а kivy поставить с помощью pip.
Скачать с http://kivy.org/#download Kivy2.7z (использует системный питон 2.7) или Kivy3.7z (включает в себя Python 3.5)
Распаковываем архив
Копируем в приложения
Создаем симлинк
Минус этого способа установки в том, что создается только одно виртуальное окружение на все Kivy проекты. Для маленьких проектов такой способ подойдет, для больших — сомневаюсь. Так что лучше сразу ставить фремворк в свое окружение.
Подразумеваю, что вы пользуетесь pyenv и pyenv-virtualenv.
Первым делом ставим зависимости.
Ставим свежий питончик.
Иногда установка падает:
В этом случае поможет:
Как только свежий питон стоит, создаем виртуальное окружение для нашего проекта.
Активируем созданное окружение
Ставим Cython
Ставим Kivy
Проверим, что все работает. Создадим файлик main.py в папке с проектом с таким содержимым:
Запустим
Если открылось окно с заголовком WordConstructor, все установилось и работает как надо.
Теперь настроим проект в пайчарме.
В Preferences выбираем Project interpreter соответствующий нашему виртуальному окружению.
Для описания интерфейсов в Kivy используется свой язык Kv Design Language. Неплохо бы добавить для него подсветку синтаксиса и автокомплит.
С настройкой все.
В следующей статье обсудим более практические вопросы.
.
Вот короткий код, который я собрал вместе, но он не работает, потому что он блокирует вызов get().
Итак, что вы действительно хотите сделать, это получить элементы из вашей очереди неблокирующим способом?
Существует несколько способов сделать это. Проще всего просто проверить, есть ли в очереди какие-либо элементы перед тем, как получить один — имеет несколько методов, которые помогают с этим, включая проверку, является ли он пустым или установка того, разрешено ли блокировать (путем установки его первый аргумент ). Если вы просто сделаете это вместо того, чтобы вызывать самостоятельно, вы не будете блокировать вещи, ожидающие, что очередь будет иметь какие-либо элементы — если она пуста или вы не можете сразу ничего, вы просто ничего не делаете.
Я не знаю, что вы хотите делать с элементами, которые вы получаете из очереди, но если это короткие операции, которые не занимают много времени, вам не понадобится ничего больше. Например, вы могли бы использовать метод каждый кадр, ничего не делать, если очередь пуста или работать с данными, если вы что-то получите.
Нет блокировки и не вступать в ваши собственные потоки.
Вы также можете создать свой собственный поток и запустить в нем блокирующий код, который является общим способом решения проблем с блокировкой, особенно задач, которые нельзя разделить на короткие разделы, которые могут выполняться между кадрами. Я не знаю о деталях этого, но он должен просто включать использование потоков python как правило. Вы можете проверить источник kivy для примера, это может загрузить веб-источник в фоновом потоке.
Изменить: также ваш SourceQueue перепутан (вы переопределите его , чтобы создать новую очередь, которую вы не храните в любом месте), и ваше расписание часов имеет бессмысленный третий аргумент , который даже не определен, Я не знаю, что происходит здесь, это, вероятно, влияет на то, что вы пытаетесь сделать, но не имеет значения для моего общего ответа выше.
ответ дан inclement 10 мая '14 в 0:44
источникподелиться
I like to use Wingware’s IDE for coding in Python.
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:
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