Как поменять текст кнопок в kivy python
Перейти к содержимому

Как поменять текст кнопок в kivy python

  • автор:

Изменение текста у Label

Добрый день!
Подскажите, пжл., в чем ошибка.
Работаю в kivy, Python. Пытаюсь изменить текст у Label при нажатии на кнопку.
Текст меняется, но почему-то поверх старого текста.
Текст программы и скриншот работы программы показаны ниже.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
from kivy.app import App from kivy.uix.button import Button from kivy.uix.label import Label from kivy.uix.boxlayout import BoxLayout class TestApp(App): def build(self): bl = BoxLayout(orientation = 'vertical') self.lbl = Label(text="0", font_size=50) bl.add_widget(self.lbl) bl.add_widget(Button(text = '7', on_press = self.update_label)) return bl def update_label(self, instance): self.lbl.text = str(instance.text) if __name__ == "__main__": TestApp().run()

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Изменение текста в Label
Здравствуйте. Только начинаю знакомиться как с программированием в целом, так и с Python. Мне.

Изменение шрифта текста в label в зависимости от объёма (размера) текста
Как сделать так, чтобы шрифт текста в label изменялся, в зависимости от label? : Пример того.

Изменение текста в Label
Добрый день! Что то я запутался, как вывести текст: Dim astr As String Private Sub.

Изменение текста в Label
Как сделать чтобы при нажатии на button изменялся текст на заранее заготовленый в label ?

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Изменение текста label
Всем привет. Помогите плиз, ответа нигде найти не могу. Нужно изменить текст label’а.

Изменение текста в label
доброго времени суток! появилась такая проблема. имеются 2 формы ReadersAll и IssueReturn. на форме.

Изменение размера текста в label
Подскажите пожалуйста, как в label по нажатию кнопки изменить его размер. К примеру на 16пт? Все.

Изменение свойств текста в label
Здравствуйте. А возможно ли изменение свойств части текста в label ? Если нет — то в каком.

Изменение текста label с checkbox внутри
Здравствуйте. Смотрите, меняю в определённый момент текст label`a рядом с чекбоксом. <input.

Изменение текста label через RCData
Здравствуйте у меня такой вопрос я сделал 2 программы первую программу я добавил в ресурсы второй.

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

Как менять текст кнопки в Kivy Python?

Мне нужно чтобы на кнопке текст менялся. Прошу, помогите! Спасибо заранее.

Отслеживать

задан 26 мар 2022 в 17:26

Роман Попов Роман Попов

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

from kivy.app import App from kivy.uix.button import Button money = 1000 class MainApp(App): def build(self): self.btn1 = Button(text = str(money),size_hint = (.4,.5), pos_hint = ) self.btn1.on_press = self.change_money return self.btn1 def change_money(self): global money money=money+1 self.btn1.text= str(money) app = MainApp() app.run() 

Отслеживать

ответ дан 9 апр 2022 в 5:41

Илья Старчиков Илья Старчиков

1 2 2 бронзовых знака

Ну зачем вы такой говнокод рекомендуете!

9 апр 2022 в 6:50

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

Как поменять текст в Label при нажатии кнопки?

xXLareMoonXx

1. В функции обязательно надо добавить аргумент instance.
2. Чтобы можно было изменить текст при нажатии кнопки надо не сразу через Add_Widget, а сначала добавить в переменную, перед названием переменной надо ставить .self чтобы изменить текст

Ответ написан более двух лет назад

Комментировать

Нравится Комментировать

Kivy Python

Kivy это фреймворк на Python с открытым исходным кодом для разработки кроссплатформенных приложений.

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

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

Для начала установим Kivy, согласно официальной документации через pip это делается командой:

pip install kivy[base]

Первая программа на фреймворке Kivy

После установки, проверим работоспособность kivy создав простое первое приложение, которое выведет нам Привет мир!

Создадим файл hello.py со следующим содержимым:

from kivy.app import App from kivy.uix.label import Label class MainApp(App): def build(self): label = Label(text='Привет мир!') return label if __name__ == '__main__': app = MainApp() app.run()

Запускаем и видим наше приложение:

Первое приложение на фреймворке kivy

Каждому приложению Kivy требуется создать подкласс App и переопределить метод build(), что мы и сделали. Сюда мы поместили код, который создает виджет Label с переданным значением text.

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

Всего существует 8 видов лайаутов, о них можно почитать в официальной документации: https://kivy.org/doc/stable/gettingstarted/layouts.html

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

Изменим метод build чтобы он возвращал нам не один элемент интерфейса, а слой с несколькими элементами:

 def build(self): layout = BoxLayout() label1 = Label(text='Привет') label2 = Label(text='мир!') layout.add_widget(label1) layout.add_widget(label2) return layout

Не забудем импортировать BoxLayout

from kivy.uix.boxlayout import BoxLayout

Теперь запустим и увидим нужный результат:

Программа на kivy с двумя виджетами Label на BoxLayout

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

Сделаем отдельный файл с этой разметкой, он должен иметь расширение kv, по умолчанию метод run() будет искать с файл с именем нашего класса без App, т.е. в нашем случае main.kv

Перепишем пример выше, сначала код файла main.kv:

: Label: text: 'Привет' Label: text: 'Мир'

Теперь изменим код hello.py на:

from kivy.app import App from kivy.uix.boxlayout import BoxLayout class MainWidget(BoxLayout): pass class MainApp(App): def build(self): return MainWidget() if __name__ == '__main__': app = MainApp() app.run()

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

Начнем доработку внешнего вида, для этого поменяем файл main.kv. Во первых сделаем разные цвета для наших Label и отделим их друг от друга:

: orientation: 'vertical' padding: 20 spacing: 20 Label: markup: True text: '[color=000000]Привет[/color]' canvas.before: Color: rgba: 1, 1, 1, 1 Rectangle: pos: self.pos size: self.size Label: text: 'Мир' canvas.before: Color: rgba: 1, .5, 0, 1 Rectangle: pos: self.pos size: self.size 

Работа с внешнем видом в фреймворке kivy

Усложняем программу

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

Она должна выглядеть вот так:

Конечная программа на фреймворке Kivy Python

Сверху картинка, потом поле ввода, потом надпись, потом кнопка.

Файл шаблона (main.kv) у меня получился таким:

: orientation: 'vertical' padding: 20 spacing: 20 Image: source: 'hello.png' TextInput: multiline: False size_hint: (.5, None) pos_hint: height: 50 font_size: 30 Label: font_size: 30 text: 'Напишите как вас зовут' Button: font_size: 30 text: 'Поздороваться' size_hint: (.5, None) pos_hint:

hello.png — это файл с картинкой с надписью hello, в моем случае он лежит в корне проекта

Теперь осталось сделать чтобы программа выполняла свою функцию и здоровалась с нами по нажатию кнопки «Поздороваться».

Сначала добавим в класс MainWidget добавим метод say_hello():

class MainWidget(BoxLayout): def say_hello(self): print('тест кнопки')

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

Button: font_size: 30 text: 'Поздороваться' size_hint: (.5, None) pos_hint: on_press: root.say_hello()

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

smiley

Если так, то пока все работает правильно

Дальше нужно сделать, чтобы в Label менялся текст на тот, который введен в виджете TextInput.

Для этого нам нужно получить доступ к свойству text этих виджетов.

Для этого импортируем класс ObjectProperty и создадим 2 экземпляра этого класса:

from kivy.properties import ObjectProperty class MainWidget(BoxLayout): hello_label = ObjectProperty() name_input = ObjectProperty() def say_hello(self): . 

Теперь откроем файл main.kv и добавим индефикаторы для виджетов Label и TextInput, чтобы на них можно было ссылаться из других частей KV файла.

TextInput: id: name Label: id: hello 

Теперь установим эти индефикаторы в значения свойств hello_label и name_input, которые мы определили в методе say_hello():

: orientation: 'vertical' padding: 20 spacing: 20 name_input: name hello_label: hello . 

Теперь мы можем получить доступ к свойству text этих виджетов, изменим методе say_hello():

def say_hello(self): self.hello_label.text = 'Привет ' + self.name_input.text

Собственно все, можно запустить программу и проверить, все должно работать.

Конечная программа на фреймворке Kivy Python

Весь код файлов есть в репозитории на гитхабе https://github.com/alexandrtretyakov/kivy

Категории

Свежие записи

  • Импорт/экспорт Linux WSL
  • Не печатаются заглавные буквы в PowerShell
  • 1С-Битрикс: Ошибка авторизации! Срок действия пароля истек, необходимо сменить пароль.
  • Несколько конфигураций для проекта Django
  • Django inclusion_tag с разными шаблонами
  • Декоратор @property в моделях Django

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *