Strong-stuff.ru

Образование Онлайн
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Kivy python уроки

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

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

    Переводы , 10 августа 2017 в 22:40

В этой статье мы напишем классическую «Змейку» на Python с помощью инструмента для создания GUI Kivy.

Знакомимся с Kivy

Kivy — это популярный инструмент для создания пользовательских интерфейсов, который отлично подходит для разработки приложений и несложных игр. Одним из основных достоинств Kivy является портируемость — возможность безболезненного переноса ваших проектов с одной платформы на другую. Наша «Змейка» будет работать на платформе Android.

Kivy эффективно использует Cython — язык программирования, сочетающий в себе оптимизированность C++ и синтаксис Python — что положительно сказывается на производительности. Также Kivy активно использует GPU для графических процессов, освобождая CPU для других вычислений.

Рекомендуемые ресурсы для начала работы с Kivy:

Устанавливаем Kivy

Зависимости

Прим. перев. Код проверен на Ubuntu 16.04, Cython 0.25, Pygame 1.9.4.dev0, Buildozer 0.33, Kyvi 1.10.

21 апреля в 16:00 в 16:00, онлайн, беcплатно

Для правильной работы Kivy нам требуется три основных пакета: Cython, pygame и python-dev. Если вы используете Ubuntu, вам также может понадобиться библиотека gstreamer, которая используется для поддержки некоторых видеовозможностей фреймворка.

Устанавливаем зависимости pygame:

Добавляем репозиторий Kivy:

Buildozer

Этот пакет нам понадобится для упрощения процесса установки нашего Android-приложения:

Нам также понадобится Java JDK. И если вы используете 64-битную систему, вам понадобятся 32-битные версии зависимостей.

Устанавливаем Java JDK:

Устанавливаем 32-битные зависимости:

Оно работает?

Прежде чем начать писать нашу «Змейку», давайте проверим, правильно ли у нас все установилось. Иначе в дальнейшем может обнаружиться, что проект не компилируется из-за какого-нибудь недостающего пакета.

Для проверки напишем старый добрый «Hello, world!».

Приступим к созданию проекта. Нужно перейти в рабочую папку и выполнить команду:

Теперь откроем файл с расширением .spec в любом текстовом редакторе и изменим следующие строки:

  • имя нашего приложения title = Hello World ;
  • название пакета package.name = helloworldapp ;
  • домен пакета (нужен для android/ios сборки) package.domain = org.helloworldapp ;
  • закомментируйте эти строки, если они ещё не закомментированы:
  • строка version = 1.0.0 должна быть раскомментированной.

Создайте файл main.py и добавьте в него следующий код:

Теперь все готово к сборке. Вернемся к терминалу.

Примечание В случае возникновения каких-либо ошибок установите значение log_level = 2 в файле buildozer.spec. Это даст более развернутое описание ошибки. Теперь мы точно готовы приступить к написанию «Змейки».

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

В этой части урока мы напишем игровой движок нашей «Змейки». И под созданием игрового движка подразумевается:

1. Написание классов, которые станут скелетом нашего приложения.
2. Предоставление им правильных методов и свойств, чтобы мы могли управлять ими по своему усмотрению.
3. Соединение всего в основном цикле приложения.

Классы

Теперь давайте разберем нашу игру на составные элементы: змея и игровое поле. Змея состоит из двух основных элементов: головы и хвоста. И надо не забыть, что змее нужно что-то есть.

Таким образом нам потребуется организовать следующую иерархию виджетов:

Мы объявим наши классы в файлах main.py и snake.kv , чтобы отделить дизайн от логики:

Свойства

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

Playground — это корневой виджет. Мы разделим его на сетку. Эта матрица поможет позиционировать и перемещать объекты по полю. Представление каждого дочернего виджета будет занимать одну клетку. Также нужно реализовать возможность сохранения счета и изменения частоты появления фруктов.

И последнее, но не менее важное: нужно реализовать управление вводом, но сделаем мы это в следующем разделе.

Объект змеи не должен содержать ничего, кроме двух ее деталей: головы и хвоста.

Для головы мы должны знать текущее положение и направление движения для правильного графического представления: если змея движется направо — рисуем треугольник повернутый вправо, если змея движется влево — рисуем треугольник повернутый влево.

Позиция и направление будут соответствовать определенным инструкциям рисования. Для рисования треугольника нам нужно шесть точек (две координаты на одну вершину). Эти координаты будут не ячейками сетки, а определенными пикселями на холсте

Наконец, нам надо хранить информацию об объекте, нарисованном на холсте, чтобы удалить его позже (например, для перезапуска игры). Мы добавим логическую переменную, указывающую, должен ли объект быть нарисован на холсте:

Теперь хвост. Он состоит из блоков (изначально трех), занимающих одну ячейку. Когда «Змейка» будет двигаться, мы будем убирать самый последний блок хвоста и добавлять новый на предыдущую позицию головы:

Фрукт

Поведение фрукта похоже на поведение змеиной головы. Нам понадобится отслеживать его позицию, состояние и интервал появления:

В классе SnakeApp будет происходить запуск нашего приложения:

Кое-что еще: нужно задать размеры виджетов. Каждый элемент будет занимать одну ячейку поля. Значит:

  • высота виджета = высота поля / количество строк сетки;
  • ширина виджета = ширина поля / количество колонок сетки.

Также нам нужно добавить виджет отображающий текущий счет.

Теперь snake.kv выглядит так:

Методы

Начнем с класса змеи. Мы хотим устанавливать ее в начальное положение и получать информацию о том, где она находится и как взаимодействует с объектами поля:

Мы назвали ряд методов. Теперь давайте их реализуем. Начнем с remove() и add_block() :

Теперь работаем с головой. Она будет иметь две функции: move() и remove() :

А что там с фруктами? Мы должны уметь помещать их в заданные координаты и удалять, когда нам это понадобится:

Почти готово, не сдавайтесь! Теперь нужно организовать весь игровой процесс, который будет происходить в классе Playground . Рассмотрим логику игры: она начинается с того, что змея помещается в случайные координаты. Игра обновляется при каждом перемещении змеи. Во время обновлений мы проверяем направление змеи и ее положение. Если змея сталкивается сама с собой или выходит за пределы поля – мы засчитываем поражение и игра начинается сначала.

Как будет осуществляться управление? Когда игрок касается экрана, мы сохраняем координаты касания. Когда палец будет перемещаться, мы будем сравнивать новое положение с исходным. Если позиция будет изменена на 10 % от размера экрана, мы будем определять это как инструкцию и обрабатывать ее:

Основной цикл

Здесь происходят процессы, устанавливающие положение фрукта, управляющие движением змеи и определяющие проигрыш:

Нужно добавить обработчик для события сброса игры:

Теперь мы можем протестировать игру.

Одна важная деталь. Чтобы приложение запустилось с правильным разрешением экрана, нужно сделать так:

И вуаля! Теперь вы можете запустить приложение. Остается только упаковать его с помощью buildozer и загрузить на устройство.

Создаем экраны

В приложении будет два экрана: приветствия и игровой. Также будет всплывающее меню настроек. Сначала мы сделаем макеты наших виджетов в .kv-файле, а потом напишем соответствующие классы Python.

Внешняя оболочка

PlaygroundScreen содержит только игровое поле:

Основной экран будет состоять из трех встроенных виджетов: название приложения, кнопки запуска игры и кнопки вызывающая меню настроек:

Всплывающее окно будет занимать ¾ экрана приветствия. Оно будет содержать виджеты, необходимые для установки параметров, и кнопку «Сохранить».

Классы

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

Теперь нужно сделать так, чтоб экран приветствия показывался при запуске игры, а игра начиналась только тогда, когда будет показано игровое поле:

Также нам нужно подготовить класс окна настроек, иначе привязка будет работать не правильно:

Теперь добавим ScreenManager в приложение и зарегистрируем два экрана:

Теперь нужно сказать кнопкам, что делать, когда на них нажимают:

После проигрыша нужно возвращаться обратно на экран приветствия:

Добавляем настройки

У нас будет всего два параметра:

  1. Включение/отключение границ. Если границы включены, при выхождении змеи за пределы экрана засчитывается проигрыш. Если границы выключены, змея будет появляться на другой стороне, если выходит за пределы.
  2. Скорость змеи.

Добавляем необходимые виджеты во всплывающее окно:

Теперь подготовим классы, чтобы они могли изменяться вместе с настройками. Если границы включены, будем рисовать очертание игрового поля. Также добавим возможность изменения частоты обновления:

Изменим всплывающее окно так, чтобы оно могло передавать значения:

Готово. Теперь можно упаковать проект и играть:

Kv language¶

Concept behind the language¶

As your application grows more complex, it’s common that the construction of widget trees and explicit declaration of bindings becomes verbose and hard to maintain. The KV Language is an attempt to overcome these shortcomings.

The KV language, sometimes called kvlang or the kivy language, allows you to create your widget tree in a declarative way and to bind widget properties to each other or to callbacks in a natural manner. It allows for very fast prototypes and agile changes to your UI. It also facilitates separating the logic of your application and its User Interface.

How to load KV¶

There are two ways to load Kv code into your application:

By name convention:

Kivy looks for a Kv file with the same name as your App class in lowercase, minus “App” if it ends with ‘App’ e.g:

If this file defines a Root Widget it will be attached to the App’s root attribute and used as the base of the application widget tree.

Builder : You can tell Kivy to directly load a string or a file. If this string or file defines a root widget, it will be returned by the method:

Rule context¶

A Kv source constitutes of rules which are used to describe the content of a Widget. You can have one root rule, and any number of class or template rules.

The root rule is declared by declaring the class of your root widget, without any indentation, followed by : and will be set as the root attribute of the App instance:

Читать еще:  Китайский язык с дмитрием петровым урок 1

A class rule, declared by the name of a widget class between and followed by : , defines the appearance and behavior of any instance of that class:

Rules use indentation for delimitation, like Python. Indentation should be four spaces per level, like the Python style guide recommends.

There are three keywords specific to the Kv language:

  • app : always refers to the instance of your application.
  • root : refers to the base widget/template in the current rule
  • self : always refer to the current widget

Special syntax¶

There is a special syntax to define values for the whole Kv context.

To access Python modules and classes from kv, use #:import

is equivalent to:

To set a global value, use #:set

is equivalent to:

Instantiate children¶

To declare a widget instance of some class as a child widget, just declare that child inside the rule:

The example above defines that our root widget, an instance of MyRootWidget , has a child that is an instance of the BoxLayout , and that BoxLayout further has two children, instances of the Button class.

The Python equivalent of this code might be:

Which you may find less nice, both to read and to write.

Of course, in Python, you can pass keyword arguments to your widgets at creation to specify their behaviour. For example, to set the number of columns of a gridlayout , we would do:

To do the same thing in kv, you can set properties of the child widget directly in the rule:

The value is evaluated as a Python expression, and all the properties used in the expression will be observed, that means that if you had something like this in Python (this assume self is a widget with a data ListProperty ):

To have your display updated when your data change, you can now have just:

Widget names should start with upper case letters while property names should start with lower case ones. Following the PEP8 Naming Conventions is encouraged.

Event Bindings¶

You can bind to events in Kv using the “:” syntax, that is, associating a callback to an event:

You can pass the values dispatched by the signal using the args keyword:

More complex expressions can be used, like:

This expression listens for a change in center_x , center_y , and texture_size . If one of them changes, the expression will be re-evaluated to update the pos field.

You can also handle on_ events inside your kv language. For example the TextInput class has a focus property whose auto-generated on_focus event can be accessed inside the kv language like so:

Extend canvas¶

Kv lang can be used to define the canvas instructions of your widget like this:

And they get updated when properties values change.

Of course you can use canvas.before and canvas.after .

Referencing Widgets¶

In a widget tree there is often a need to access/reference other widgets. The Kv Language provides a way to do this using id’s. Think of them as class level variables that can only be used in the Kv language. Consider the following:

An id is limited in scope to the rule it is declared in, so in the code above s_but can not be accessed outside the rule.

When assigning a value to id , remember that the value isn’t a string. There are no quotes: good -> id: value , bad -> id: ‘value’

An id is a weakref to the widget and not the widget itself. As a consequence, storing the id is not sufficient to keep the widget from being garbage collected. To demonstrate:

Although a reference to label_widget is stored in MyWidget , it is not sufficient to keep the object alive once other references have been removed because it’s only a weakref. Therefore, after the remove button is clicked (which removes any direct reference to the widget) and the window is resized (which calls the garbage collector resulting in the deletion of label_widget ), when the add button is clicked to add the widget back, a ReferenceError: weakly-referenced object no longer exists will be thrown.

To keep the widget alive, a direct reference to the label_widget widget must be kept. This is achieved using id.__self__ or label_widget.__self__ in this case. The correct way to do this would be:

Python для Android: Как начать делать кроссплатформенные приложения с Kivy

В этом руководстве приведены шаги, необходимые для создания кроссплатформенного приложения для Android с использованием Python-фреймворка Kivy и Linux Ubuntu. Перед началом установки и запуском Kivy необходимо установить его зависимости. Большая часть времени уйдёт на подготовку рабочей среды Kivy путем установки библиотек, необходимых для его работы. В этом уроке Kivy будет установлен в виртуальной среде.

Используемой платформой будет Linux Ubuntu 18.04 с Python 3.6.5. При запуске Kivy на разных платформах появляются некоторые различия. Чтобы иметь возможность устанавливать библиотеки, перемещаться по каталогам ОС, копировать/удалять/извлекать файлы, запускать скрипты Python, читатель должен иметь базовое представление о командах терминала Linux и Python.

1. Введение

Kivy используется для создания естественных пользовательских интерфейсов с преимуществами абстракции и модульности. Он отделяет разработчика от ненужных и сложных деталей и просто предоставляет простые API для выполнения сложных задач. В результате вы должны определить, какие бэкенд библиотеки Kivy будет использовать для выполнения своих задач. Мы собираемся использовать SDL (Simple DirectMedia Layer) — кроссплатформенную библиотеку для низкоуровневого доступа к графическому оборудованию через OpenGL. Помимо SDL, другие библиотеки, такие как GStreamer, используются для обработки аудио и видео. Поскольку такие библиотеки написаны на C, нам также потребуется Cython.

2. Установка зависимостей Kivy

Основываясь на инструкциях по установке Kivy на Linux (https://kivy.org/docs/installation/installation-linux.html), здесь перечислены необходимые библиотеки для установки SDL2 и GStreamer. Обратите внимание, что вы можете выбрать версию Python для использования в Kivy с помощью python и python-dev для Python 2 или с помощью python3 и python3-dev для Python 3. Pip также находится в перечисленном ниже списке для последующего использования в подготовке виртуальной среды Kivy.

3. Создание виртуальной среды для установки Kivy

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

Перед началом создания виртуальной среды мы должны убедиться, что инструменты, необходимые для ее создания, уже установлены и обновлены. Следующие команды гарантируют, что инструменты virtualenv и setuptoolsуже существуют и обновлены.

virtualenv используется для создания изолированной среды Python. Для получения дополнительной информации о преимуществах виртуальной среды вы можете посетить страницу https://virtualenv.pypa.io/en/stable/. setuptools используется для упаковки проектов Python.

После этого мы готовы создать виртуальную среду Kivy. Следующая команда создает среду с названием mykivyinstall.

Аргумент —no-site-packages используется для изоляции среды от основной установки Python. Это делается для того, чтобы вы могли свободно работать с этим проектом, не затронув другие.

После введения этой команды мы ожидаем получить новую папку в текущем каталоге, названную в соответствии с именем виртуальной среды, как показано на рисунке 1.

В предыдущей команде будет использоваться обычный интерпретатор Python внутри среды. Это может быть Python 2, а мы работаем с Python 3. По этой причине мы могли бы явно указать, какой интерпретатор Python использовать с использованием ключа -p, как в следующей команде:

После создания виртуальной среды мы можем активировать её, чтобы начать установку Kivy. Она может быть активирована следующей командой.

Точка (.) в предыдущей команде представляет собой встроенную команду, которая выполняет содержимое файла, переданного в качестве аргумента. Это синоним источника команды. В результате предыдущая команда идентична этой команде:

Командная строка должна измениться после активации виртуальной среды и начать выглядеть следующим образом:

4. Установка Cython

Перед установкой Kivy Cython должен быть установлен в такой же среде в соответствии со следующей командой:

Обратите внимание, что версия Cython зависит от версии Kivy, которая будет установлена. В данный момент последняя версия Kivy1.10.0, и для нее требуется Cython 0.25.2, и именно поэтому она используется в приведенной выше команде. После этого мы готовы к установке Kivy.

5. Установка Kivy

Kivy можно установить с помощью pip в соответствии со следующей командой:

После этой команды ожидается, что Kivy будет загружен и установлен автоматически. Но учтите, что установка Kivy — это трудная часть, потому что существует множество зависимостей, которые являются варьируются в зависимости от используемой машины, платформы и библиотек, которые у вас уже есть и которых нету. Процесс не является простым и прямолинейным, поэтому вы должны искать альтернативные способы решения ошибок установки. Например, Kivy можно установить с помощью wheel-файла или путем клонирования его проекта github в соответствии со следующей командой:

6. Импорт Kivy

При достижении этого этапа, ожидается, что Kivy уже установлен и успешно работает на вашем компьютере. Мы можем протестировать эту среду, импортировав Kivy, как показано на рисунке 2. Виртуальная среда активирована, Python активирован и Kivy успешно импортирован.

7. Создание простого приложения Kivy

Убедившись, что Kivy работает хорошо, мы готовы создать наше первое приложение Kivy.

Приложение Kivy представляет из себя простой файл Python, который содержит код Kivy. Файл в нашем приложении будет называться «main.py». Причина в том, что при создании мобильного приложения должен быть файл с именем «main.py», который является входом приложения. В приложении, которое будет создано, будет три виджета Kivy, которые представляют собой ввод текста (text input), ярлык (label) и кнопку (button). Эти виджеты располагаются вертикально в окне при использовании коробочной схемы расположения инструментов. Они появятся в соответствии с тем порядком, в котором были добавлены в коробочную схему расположения. Другими словами, текстовый ввод будет первым виджетом, ярлык вторым и кнопка в самом низу. Когда кнопка нажата, текст, введенный в текстовый ввод, будет отображаться в ярлыке. Вот код Kivy этого приложения.

  1. import kivy.uix.boxlayout
  2. import kivy.uix.textinput
  3. import kivy.uix.label
  4. import kivy.uix.button
  5. class SimpleApp(kivy.app.App):
  6. def build(self):
  7. self.textInput = kivy.uix.textinput.TextInput()
  8. self.label = kivy.uix.label.Label(text=”Your Message.”)
  9. self.button = kivy.uix.button.Button(text=”Click Me.”)
  10. self.button.bind(on_press=self.displayMessage)
  11. self.boxLayout = kivy.uix.boxlayout.BoxLayout(orientation=”vertical”)
  12. self.boxLayout.add_widget(self.textInput)
  13. self.boxLayout.add_widget(self.label)
  14. self.boxLayout.add_widget(self.button)
  15. return self.boxLayout
  16. def displayMessage(self, btn):
  17. self.label.text = self.textInput.text
  18. if __name__ == “__main__”:
  19. simpleApp = SimpleApp()
  20. simpleApp.run()
Читать еще:  Дефиле видео уроки для начинающих

Метод сборки — это то, что вызывается после запуска приложения, и, таким образом, оно используется для инициализации окна графического интерфейса Kivy. Три виджета создаются, а затем добавляются в макет окна. Метод bind привязывает метод обратного вызова к кнопке, чтобы выполняться при нажатии. Метод обратного вызова называется «displayMessage», который устанавливает текстом ярлыка текст, который введён в виджет текстового ввода . Приложения запускаются, только если файл main.py выполняется, гарантируя, что переменная «__name__» имеет значение «__main__» внутри оператора if. Делать так — хорошая практика. Для запуска приложения необходимо выполнить два шага. Сначала нужно активировать созданную ранее виртуальную среду Kivy с именем «mykivyinstall». Затем, запустить файл приложения «main.py» после перехода в папку, в которой он существует. Эти шаги показаны на рисунке 3

На рисунке 4 показано окно с тремя созданными ранее виджетами. Обратите внимание, что высота окна делится поровну между тремя виджетама так, чтобы каждый виджет имел одну третью высоты окна. В этом примере сообщение «Hello Kivy» вводится в поле текстового ввод. Когда кнопка нажата, сообщение появится в ярлыке.

На этом этапе можно сказать, что приложение Kivy для рабочего стола успешно создано. Теперь мы можем начать упаковку этого проекта как приложения для Android.

8. Установка Buildozer

Инструмент Buildozer используется для упаковки проекта в качестве приложения для Android. После установки Buildozer автоматизирует процесс создания приложения для Android. Чтобы установить Buildozer, необходимо разрешить некоторые зависимости. В дополнение к установленным ранее Cython и git, есть некоторые другие библиотеки, которые должны быть установлены. На основе инструкций по установке взятых с http://buildozer.readthedocs.io/en/latest/installation.html, все зависимости можно скачать и установить с помощью следующих команд Ubuntu:

Buildozer может быть установлен с помощью этой команды. Эта команда гарантирует, что Buildozer будет установлен и обновлен.

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

9. Создание файла buildozer.spec

Структура нашего проекта показана на рисунке 5. В папке с именем simpleapp размещен файл main.py, созданный ранее. Красота Kivy заключается в том, что этот же файл Python будет использоваться без изменений в приложении для Android. Но есть и другой файл с именем buildozer.spec, который необходим для создания приложения. Этот файл содержит информацию об Android-приложении, такую как название и версия. Как создать этот файл?

Файл buildozer.spec может быть сгенерирован с использованием инструмента Buildozer. Измените текущий рабочий каталог на каталог, в котором размещён файл приложения main.py, а затем выполните следующую команду:

Появится сообщение, указывающее, что был создан файл buildozer.spec, как показано на рисунке 6.

Далее перечислены некоторые из важных свойств приложения Android в файле buildozer.spec:

Например, заголовок (title) содержит заголовок приложения, исходный каталог (source directory) ссылается на каталог приложения, который устанавливается в этом случае как текущий каталог, версия приложения, версии Python и Kivy и прочее. Эти поля находятся внутри раздела [app] файла спецификации. Вы можете проверить спецификации приложения пройдя по этой ссылке http://buildozer.readthedocs.io/en/latest/specifications.html. Вы также можете отредактировать файл спецификации, чтобы изменить все поля, которые, по вашему мнению, требуют редактирования.

После подготовки всех файлов, необходимых для создания Android приложения, давайте наконец его создадим.

10. Создание приложения для Android с помощью Buildozer

Buildozer — хороший инструмент для создания приложения для Android, потому что он готовит среду в соответствии со всеми требованиям по созданию успешного приложения. Эти такие требования такие, как python-for-android, Android SDK, NDK и другие. Внутри каталога приложения его можно создать, используя следующую команду:

На рисунке 7 показан ответ при вводе команды. При создании приложения в первый раз, Buildozer должен загрузить все эти зависимости. Это займет некоторое время, пока они загрузятся и установятся. Потерпите.

После выполнения команды файл APK будет найден в следующем каталоге проекта: /simpleapp/.buildozer/android/platform/build/dists/simpleapp/bin. Файл APK можно перенести на устройство Android для его запуска. Также можно подключить устройство Android к машине, создать, развернуть и запустить приложение, используя одну команду, которая выглядит следующим образом:

На рисунке 8 показан запуск приложения для Android.

Изучил kivy или история о том, как меня обманули.

Итак, понадобилось мне изучить отдельно Фреймворк kivy для Python.

Перерыл кучу ссылок в гугл и нашел крайне мало информации: немного уроков на хабре, пару книжек на англ. языке, несколько вводных уроков от известного сайта по программированию и это: сайт некого Бовсуновского В. И., обещающий познакомить меня с kivy всего за 1990 р. Целых 46 шагов отделяли меня от знания.

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

После оплаты на почту пришло сообщение, что вместо одного курса мне доступны, нахрен, все в благодарность и спасибо за доверие. Я подумал ‘ехуууу’, сколько плюх и всего за 2 косаря. И рассыпался в благодарностях.

Осознание того, что что-то тут не чисто пришло, к сожалению, только на «Шаг 11. Встраивание макетов в одно пространство». Суть в том, что учитель, явно переписывал код из какой-то тетрадки, не понимая, суть того, что он пишет. Знаете какие его слова были, когда у него макеты летали по экрану, то тут, то там? Поиграйтесь со значениями, посмотрите, как двигается, разберетесь сами. А рассказать, нам неучам, почему оно так, дело не барское, либо он сам хз — почему так.
Впервые, у меня закралось сомнения, что где-то я уже это видел.
Окончательно мои сомнения подтвердились, когда мы начали писать программы для рисования Stickman’а. Его слова, что мы рисуем какого-то мужика, непонятные ошибки, которые он с трудом видит, постоянное коверканье слов, и «уверенные» знания англ. — дали понять, что он не понимает, то, что делает, а тупо копирует. Откуда?
А вот из этой книги:

И вроде бы ну и что? Многие так делают, он же объясняет! А вот нифига, он находит код автора и и создает по нему видео, не меняя абсолютно ничего, не дополняя это своими объяснениями, почему так, здесь так, а лишь говорит, что поиграйтесь параметрами и вы сами все поймете. Ссылок на книгу в его видео естесна нигде нет 😉

Вот вам для примера: скрин из книги и скрин его видеоматериалов

Видете ошибку в слове Gestures(жесты)?
Хотите еще? Вот код из книги и его код (Тут он позволил себе изменить название класса:)):

Я думаю этого достаточно. По факту, там идет все по порядку, точь в точь, как в книге. От заголовка к заголовку.
Пост не ради плюсов, носит информативный характер, комментарии для минусов оставлю.
Не обращайтесь в эту контору, вас не научат. потеряете время.
Если у кого есть более интересные статьи, с радостью получу их из ваших. эм. компьютеров. Спасибо за внимание!

коммент для минусов 1

Увидел, что ты ушел на джаву, плак-плак;(

Салют чувак! Тоже сейчас учу kivy. Хотел спросить знаешь ли хорошие видеокурсы на ютубе или просто текстовые курсы, сайты в инете? Что тебе больше всего помогло, и хороша ли эта книга, ты учился по ней?

на ютубе чувак есть, Хауди Хо. дает неплохую вводную

конечно поздно, но посмотри Олега Молчанова

Чувак, прива. А ты нашел в итоге книгу на русском по киви? Если есть, поделись плиз. Спасибо!

Ну что там чувак, нашел что-нибудь годное?

Увы, нет. По крайне мере на русском ничего.

Самое подробное первое.

Спасибо тебе огромное

не нашел эту книгу на английском. Скиньте если есть на почту

Kivy кстати прикольная вещь. Но меня остановило то, что для компиляции мобильных приложений нужно устанавливать кучу всего, а на мак пакеты ставятся с бубнами и плясками — поэтому я пошел осваивать Ionic и может быть, попытаюсь в Appcelerator

Не знаю твоих намерений, но, если я все правильно понял, в мире кросс-платформенных приложений правят C-подобные языки и Javascript

Нашел его сайт — страшный сон дизайнера)) И вот что он там предлагает))
Python + Django Framework 1.7-1.10; 1.11; 2.0 — школа практического программирования В. Бовсуновского (2013-2017).
У этого типа видимо есть блат в Джанге, т.к. версия 2.0 еще не вышла)))

Хах. Ага, видео из будущего. На сайте даже RC нет.

коммент для минусов 2

Настоящий индус в мире программирования для индусов

Освежая свои знания по Python наткнулся на одну тривиальную задачу:

Решается достаточно просто, используя условия и операторы ‘//’ и ‘%’. Честно решив задачу в свои 10-15 строк, решил посмотреть решения других людей. Восхищаюсь теми, кто использует всякие лямбда выражения и прочие штуки, делая из решения искусство.

Но тут меня поразил человек решивший задачу подобным образом:

Да, он просто вручную создал список всех «счастливых» билетов. Причем при попытке посмотреть значения вкладка просто виснет. Думаю, что там их не одна тысяча. Воистину настоящий индус из индусов. И главное решил в одну строку 🙂

Читать еще:  Ирина колосова английский уроки по порядку бесплатно

Змеиный Язык

Но ведь работает же

Разбираем ламповый конструктор

После того, как потыкал ламповый конструктор и смирился с полным отсутствием навыков рисования, пришла идея, а что если сделать сделать конвертер GIF в ламповые анимации?

Первым делом нажимаем F12 и смотрим, что браузер отправляет при сохранении

Хм, не очень похоже на нашу картинку, но попробуем разобраться. В поле data видим 39 null и один массив, очевидно, это кадры нашей анимации.

Дальше присматриваемся внимательнее к первому кадру. Почему всего одна белая точка, а значений в массиве так много? Непонятно, нужно больше данных!

Последовательно прибавляем по одной точке по горизонтали, а затем по вертикали.

Заметно, что какая-то зависимость между кадрами есть, но потребовалось еще пол часа, чтобы въехать окончательно.

Вся картинка хранится в виде одной длинной ленты, строка за строкой, [цвет,длина,цвет,длина,цвет,длина], но если длина сплошного участка цвета больше 254, то он разбивается на несколько участков. Очевидно это связано со способом хранения анимации в базе данных.

Дело за малым, осталось разобраться с цветами. Путем нескольких экспериментов была установлена следующая зависимость номеров цветов:

С помощью хитрых ухищрений и черной магии js была сгенерирована таблица [цвет по RGB] -> [его номер]
Осталось самое интересное — найти подходящую гифку и сконвертировать ее в пикабушный формат. Тут помог гугл с его расширенным поиском по картинкам — даже не пришлось сжимать картинки до размера 40х20.

Поигравшись еще немного заметил, что картинка в редакторе сохраняется при перезагрузках страницы, значит она хранится где-то в localStorage браузера. Открываем наши любимые DevTools. И правда, вот она, анимация!

Дальше просто подменяем строку сохраненной анимации, обновляем страницу, профит!
https://pikabu.ru/page/newyear2019/?id=enSiuHGE07JS

Never gonna give you up! https://pikabu.ru/page/newyear2019/?id=VaCoi3GE07t4 Тут, правда, пришлось поиграться со сжатием и повернуть картинку

Эксперимент считаю успешным, цель достигнута. А как проходят ваши выходные?

Безуспешная попытка начать учить Python

Это было тяжело, изматывающе и недолго)) увы, новый программист не родился)))

Индусский код говорите?

Как стать программистом за полгода. Или не стать.

Есть у меня один знакомый из разряда «вижу цель иду к цели», назовём его Ваня. И взбрела ему навязчивая идея стать программистом (удивительно в наше время). Иван, к слову, уже «вхождец» в айти, работает системным администратором, а потому более менее с отраслью знаком. Собственно началось всё с чтения книжек разных умных дядечек, но книжки оказались слишком сложными для новичка и записался он тогда на курсы из разряда «Научим программировать с нуля за пол года» (ну хоть не за 21 день). Парниша, надо сказать, упорный, курсы эти своевременно оплачивал, задания делал в общем на месте не сидел. Прошли пол года, прошел год и начал он по собеседованиям ходить, но всё не везло как то, то другого кандидата найдут, то вакансия вдруг закрыта, а иногда и вовсе не отвечали. Плакался он вначале своему куратору, но толку от этого не прибавлялось, «Не любят сейчас джунов, надо уровень поднять, портфолио сделать» — говорил куратор да подкидывал ещё курсы.

И вот как то за бокалом Джина с Тоником пожаловался мне Ваня на судьбу свою нелёгкую, да рассказал всё это.

— Ты же, rsplus, программист — говорил Иван, — может поможешь мне к собеседованию подготовиться, а то валят всё время.

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

Ваня загорелся пуще прежнего и уже на следующий день мне перезвонил. Начали мы с ним разговаривать, и вот он вроде мне про фреймворк рассказывает, про библиотеки всякие, а на элементарных вопросах притормаживает и смотрит на меня как будто я глупость какую спрашиваю. Дал ему задачу простую на массив — мы такие пачками ещё на первом курсе решали. А он не знает что такое массив (!), зато коллекции — запросто. Понимания что такое класс в ООП- нету, зато все переменные final (константы). В общем всё красиво, но в лучшем случае решено с использованием трёх библиотек, склеенных между собой изолентой (Ну правда на коллекции уже почти под любую задачу можно найти либу), либо вообще не работает.

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

Чем они занимались год на курсах объяснить не может, понимание элементарных вещей полностью отсутствует, зато с легкость оперирует словами вроде интерполяция, перегрузка математических операторов, имплементация интерфейсов и прочее.

В общем как я понял пичкают их там на курсах терминологией, а под капотом навыков — ноль, я даже не знаю на что это больше рассчитано — на то что им удастся «проскочить» какой нибудь собес за счёт набора слов, или же это просто ради маркетинга (по окончанию курсов вы будете владеть ).

А Ваня теперь у меня на попечительстве. Посмотрим, реально ли сделать из человека программиста за пол года.

kivy Начало работы с kivy

замечания

Kivy — это библиотека Python с открытым исходным кодом для быстрой разработки межплатформенных пользовательских интерфейсов. Приложения Kivy могут быть разработаны для Linux, Windows, OS X, Android и iOS с использованием той же кодовой базы.

Графика создается через OpenGL ES 2, а не через собственные виджеты, что приводит к довольно равномерному появлению в разных операционных системах.

Разработка интерфейсов в Kivy необязательно включает использование kvlang, небольшого языка, который поддерживает выражения, подобные python, и взаимодействие python. Использование kvlang может значительно упростить разработку пользовательского интерфейса по сравнению с использованием исключительно Python.

Kivy может свободно пользоваться (в настоящее время под лицензией MIT) и профессионально поддерживаться.

Установка и настройка

Windows

Есть два варианта установки Kivy:

Сначала убедитесь, что инструменты python обновлены.

Затем установите основные зависимости.

Хотя у Kivy уже есть поставщики аудио и видео, GStreamer требуется для более продвинутых материалов.

в следующем тексте означает путь к каталогу с файлом python.exe .

Колесный пакет предоставляет скомпилированный Kivy, но с удаленными cython источника cython , что означает, что основной код нельзя перекомпилировать с помощью этого способа. Код Python, однако, доступен для редактирования.

Стабильная версия Kivy доступна на pypi.

Последняя версия официального репозитория доступна через ночные колеса, доступные на диске Google. Перейдите по ссылке в документах, соответствующих вашей версии python. После загрузки правильного колеса переименуйте его в соответствии с форматированием этого примера и запустите команду.

Для установки Kivy из источника требуется больше требуемых зависимостей, чем использование колес, но установка более гибкая.

Создайте новый файл в

Libdistutilsdistutils.cfg с этими строками, чтобы обеспечить правильный компилятор для исходного кода.

Тогда нужен компилятор. Либо используйте некоторые, которые вы уже установили, либо загрузите mingwpy . Важные файлы, такие как gcc.exe будут расположены в

Не забудьте указать переменные окружения, чтобы Kivy знал, какие провайдеры он должен использовать.

Теперь установите дополнительные зависимости, необходимые для компиляции.

Check Paths чтобы убедиться, что все установлено правильно и установите Kivy. Выберите один из следующих вариантов:

Kivy нуждается в доступе к двоичным файлам из некоторых зависимостей. Это означает, что правильные папки должны находиться в PATH среды.

Libidlelib; Python может быть включен в путь с помощью

Libidlelib; , Затем запустите idle в консоли, а IDLE будет готово к использованию Kivy.

Упростите это

Чтобы избежать повторной установки переменных среды, либо задайте каждый необходимый путь таким образом, либо создайте пакетный ( .bat ) файл с этими строками, помещенными в

Чтобы запустить проект Kivy после установки, запустите cmd.exe или пакетный файл и используйте python .py

установка на Ubuntu

Для установки kivy на ubuntu с помощью kivy example open terminal и выполните следующую команду

Сначала добавьте ppa

Для установки kivy

Для установки примеров kivy

Различные способы запуска простого приложения и взаимодействия с виджетами

Большинство приложений kivy начинаются с этой структуры:

Существует несколько способов:

Все коды, приведенные ниже (кроме примеров 1 и 3), имеют один и тот же виджетов и аналогичные функции, но показывают другой способ создания приложения.

Пример 1: возврат одного виджета (простого приложения Hello World)

Пример 2: возврат нескольких виджетов + кнопка печатает текст метки

Пример 3: использование класса (одиночный виджет) + кнопка печатает «Моя кнопка»

Пример 4: это то же самое, что и ex. 2, но он показывает, как использовать класс

С языком .kv

Пример 5: то же самое, но показывая, как использовать язык kv в python

** Пример 6: то же самое с частью kv в файле Tutorial.kv **

** Пример 7: ссылка на конкретный файл kv + a def в python, получающий label.text **

В myapp.kv: ориентация: «вертикальная» Ярлык: id: mylabel text: кнопка «Мое приложение»: текст: «Нажмите меня!» on_press: root.printMe (mylabel.text)

Пример 8: кнопка печатает текст метки (с помощью def в python с использованием ids («ID»))

  • self_xx из примера 7 заменяется на self

Пример 9: кнопка печатает текст метки (с помощью def в python с использованием StringProperty)

Пример 10: кнопка печатает текст метки (с помощью def в python с использованием ObjectProperty)

Привет, мир в киви.

Следующий код иллюстрирует, как сделать приложение «hello world» в kivy. Чтобы запустить это приложение в ios и android, сохраните его как main.py и используйте buildozer.

RecycleView

Простой пример в Киви.

Следующий код иллюстрирует, как делать простые всплывающие окна с Kivy.

Прикоснитесь, захватите и переместите

В следующем примере создается холст с 2 точками и 1 строка между ними. Вы сможете перемещать точку и линию вокруг.

Ссылка на основную публикацию
Adblock
detector