Как сделать кнопку в python kivy

Обновлено: 07.07.2024

В Kivy есть ли способ передать объект изображения в качестве фона кнопки вместо имени файла изображения?

button.background_normal свойство принимает только строки. Я хотел бы настроить свойства изображения, такие как allow_stretch = False .

Если это удастся, как я могу указать выравнивание изображения внутри кнопки, например. чтобы он был выровнен по левому верху?

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

Вы должны быть осторожны с позиционированием. Убедитесь, что он находится в видимой части, и ничто не покрывает его. Я использую ярлык после кнопки, потому что он имеет прозрачный цвет, так что вы можете экспериментировать с ним. Например, если ваше позиционирование неверно (попробуйте x:0 y:0 ) Вы можете увидеть кнопку, идущую в нижний левый угол в области метки.

Изображение, которое я использую, - это логотип Kivy :

В дополнение к ответу toto_tico, вы можете расположить изображение в центре кнопки следующим образом:



Изучаю python kivy и для себя решил написал маленькое приложение, чтобы разнообразить свое питание. Решил поделиться. Статья рассчитана на новичков в kivy. Приложение занимает около 100 строк кода.

Цель создания велосипеда приложения:

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

Интро

Можно не читать, в интро всякая лирика.

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

Скриншоты


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

Исходный код и пояснения

Я сознательно не использовал kv файлы, так как код дан в учебных целях, для людей, которые знакомы с python. Все написано на голом python. В пояснениях я не буду останавливаться на объяснении python кода, а сразу перейду к специфическим фишкам Kivy.

Button(text='Дневник питания', on_press=lambda x: set_screen('list_food'))

self.layout = GridLayout(cols=1, spacing=10, size_hint_y=None)

Grid Layout чем-то напоминает тег table в html, указывается cols — кол-во колонок или rows — кол-во строк.

Можно указывать оба параметра или один параметр.
Экран будет разделен на нужное кол-во отсеков.

root = RecycleView(size_hint=(1, None), size=(Window.width, Window.height))

Запуск на windows & linux & macos

Принцип для всех операционок одинаковый:

  1. Ставим python3
  2. Ставим kivy
  3. Создаем файл main.py и втыкаем в него целиком вышеуказанный код
  4. Запускаем командой

Программа должна заработать.

Сборка apk файла и запуск на телефоне с андроид

Итак, у нас есть файл с кодом программы, написанный на python. Как теперь создать приложение, чтобы его можно было запустить на телефоне с андроидом? Раньше это был достаточно мудреный процесс, требующий навыков и танцев с бубном. Теперь это не проблема.
Вот пошаговая инструкция:


Как закинуть apk файл на телефон?

Включаем на телефоне режим разработчика, подключаем USB-кабелем. Но существует специализированный инструмент для этого. Дальше устанавливаем adb: Виртуалка должна увидеть, что вы подключили телефон.

sudo apt install adb

После установки заходим в папку bin и вводим команду

adb install -r foodoptions-0.1-debug.apk

И можно примерно через минутку увидеть на телефоне приложение после того, как увидим
Success в консоли.

kivy@kivy-complete:~/Project/FoodOptions/bin$ adb install -r foodoptions-0.1-debug.apk 342 KB/s (10083019 bytes in 28.730s)
Success
kivy@kivy-complete:~/Project/FoodOptions/bin$

Если вдруг приложение падает или ведет себя не так, как ожидалось, то есть вот такая команда для просмотра ошибок

adb logcat| grep python

Русское имя приложения

В тег appName прописывается русское название приложения, эта папка создается после первого запуска buildozer android debug. После того как файл отредактируете, вернитесь назад в папку FoodOptions и запустите buildozer android debug повторно. Файл соберется по-новой. После установки на телефон имя программы будет написано на русском.

О файле buildozer.spec

Вот мой файл с гитхаба: buildozer.spec
Именно этот файл указывает buildozer-у, как именно собрать пакет.

Кому интересно, то введите внутри виртуалки команду: Там множество разных вариаций.

cd /tmp
buildozer init

Будет создан дефолтный файл buildozer.spec с кучей комментариев и пояснений. Например, если вы хотите какую-нибудь свою иконку для приложения, то указываете в строке:

свой файл с иконкой. И приложение соберется уже с вашей иконкой.

В общем, рассказ о файле buildozer.spec может занять целую статью, а то и две. Если вам надо подгрузить какой-нибудь специфический модуль, который не входит в официальную библиотеку python, то это делается в строке requirements =.

Загрузка приложения в Google Play

И дальше запускать: Надо зарегаться, пройти все процедуры, получить ключи.

sudo apt install zipalign
buildozer android release
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore /path/keystore bin/apk-unsigned.apk apkname
zipalign -v 4 bin/apk-apkname-unsigned.apk bin/apk-apkname-release.apk

Полученный файл apk-apkname-release.apk заливать в Google Play.

Ссылки

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

Python Tkinter. Часть 2

Как изменить цвет текста на кнопке и цвет самой кнопки в Tkinter?

Сражу покажу код:

btn = Button(window, text="Нажмите на кнопку", bg="pink", fg="white")

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

def btnClicked():
lbl.configure(text="Вы нажали на кнопку. ")

// window - ссылка на окно
// text - текст кнопки
// command - ссылка на обработчик нажатия клавиши
btn = Button(window, text="Нажмите на кнопку", command=btnClicked)

Полный код:

from tkinter import *

window.title("Мое приложение")
window.geometry('350x200')

lbl = Label(window, text="Метка")
lbl.grid(column=0, row=0)


def btnClicked():
lbl.configure(text="Вы нажали на кнопку. ")

// window - ссылка на окно
// text - текст кнопки
// command - ссылка на обработчик нажатия клавиши
btn = Button(window, text="Нажмите на кнопку", command=btnClicked)
btn.grid(column=1, row=0)

Считываем пользовательский ввод через Entry класс (текстовое поле Tkinter)

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

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

from tkinter import *

window.title("Мое приложение")
window.geometry('350x200')

lbl = Label(window, text="Метка")
lbl.grid(column=0, row=0)

// текстовое поле
txt = Entry(window,width=10)
txt.grid(column=1, row=0)

def btnClicked():
lbl.configure(text="Вы нажали на кнопку. ")

// window - ссылка на окно
// text - текст кнопки
// command - ссылка на обработчик нажатия клавиши
btn = Button(window, text="Нажмите на кнопку", command=btnClicked)
btn.grid(column=1, row=0)

Таким образом, вот так можно добавить обработчики событий на кнопку в Python Tkinter.


Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

Комментарии ( 0 ):


Рейтинг:

Как сбросить панель задач Windows 10 к настройкам по умолчанию

Я узнал, что в Qt у нас есть несколько способов создать QpushButton с помощью:

  1. Эффект тени
  2. сделав его Flat, установив для свойства setFlat значение True.
  3. изменение курсора другого типа, если кто-то наводит на него курсор, например, pushButton_18.setCursor (QtGui.QCursor (QtCore.Qt.PointingHandCursor))

Я хочу сделать поведение кнопок похожим и в kivy. Является ли это возможным ? Я узнал, что мы можем изменить фоновое изображение, измененное на изображение с закругленной формой. Изменение цвета фона кнопки в Kivy.

но это не так уж и приятно, так как кнопка по-прежнему выглядит очень нормально. Нет никакого теневого эффекта. Даже когда мы нажимаем углы за пределами кнопки, это обрабатывается, если кнопка нажата.

Я просмотрел документацию Kivy Button, а также Label и попытался изменить поведение и внешний вид кнопки. Может кто-нибудь посоветует, как сделать кнопку лучше? Мы можем попробовать:

  1. Затенение влияет
  2. Эффект анимации в фоновом режиме
  3. Закругленные края и т. Д.
  4. Можем ли мы использовать анимированные изображения в формате GIF в качестве фона для анимации (я пробовал это, но она больше не была анимирована)

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

Кнопка в kivy начинается с ButtonBehavior, который сочетается с Label, добавляя свойства, такие как background_normal / down . для обработки текстур на холсте.

Зная это, вы можете просто комбинировать ButtonBehavior с любым другим виджетом по вашему выбору. Например.

Здесь мы просто устанавливаем ButtonBehavior для объединения с AsyncImage, который загружает изображение из Интернета для вашего фона.

вы должны увидеть что-то вроде этого

Эффект анимации в фоновом режиме

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

Посмотрите на пример изображений последовательности. Это было сделано до того, как ButtonBehaviors были представлены, поэтому у него даже есть пример класса AnimatedButton, использующего более старый метод, который по сути больше не нужен.

Есть много способов сделать это.

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

Или создайте свой собственный класс CustomButtonBehavior, производный от ButtonBehavior, который переопределяет collidepoint чтобы вернуть True только для настраиваемого столкновения. Вот пример использования пользовательского столкновения для виджетов. Вы даже можете установить изображение keep_data для свойства True, а затем проверьте данные пикселей на альфа-канал, чтобы определить, хотите ли вы вернуть значение true для столкновения.

Просто используйте изображение с закругленными краями. Kivy поддерживает использование инструкции BorderImage, которая эквивалентна css borderimage с точки зрения функциональности. Собственная кнопка Киви по умолчанию использует это. Попробуйте поэкспериментировать с атрибутом границы BorderImage.

Читайте также: