Определить идентификатор кнопки
У вас есть правильный способ присвоения id кнопке в скрипте Python.
btn1 = Button(text="Close",id="test")
Примечание
Идентификатор , объявленный в Скрипт Python отличается от идентификаторов , определенных в файле kv .
Error
Ошибка, с которой вы столкнулись, заключается не в том, что идентификатор кнопки установлен неправильно. Ключевое слово self ссылается на «текущий экземпляр виджета», т.е. оповещение / всплывающее окно, и не является атрибутом test .
File ".../main.py", line 33, in __init__
self.test.background_color = [0, 0, 1, 0.5]
AttributeError: 'Alert' object has no attribute 'test'
Решение
Когда кнопка была определена, она была назначена объекту btn1 . Поэтому, если вы хотите изменить цвет фона кнопки, используйте
btn1.background_colour
Пример * * тысяча сорок-четырь
main.py
from kivy.uix.screenmanager import Screen
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.popup import Popup
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.core.window import Window
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
Window.size = (500, 150)
class Alert(Popup):
def __init__(self, title, text):
super(Alert, self).__init__()
box = BoxLayout(orientation='vertical', padding=(5))
box.add_widget(Label(text=text))
btn1 = Button(text="Close", id="test")
box.add_widget(btn1)
self.title = title
self.title_size = 30
self.title_align = 'center'
self.content = box
self.size_hint = (None, None)
self.size = (300, 200)
self.auto_dismiss = False
self.open()
btn1.background_color = [0, 0, 1, 0.5]
class Test(App):
def build(self):
Alert(title='yeah!', text='inputs are invalid')
return
if __name__ == '__main__':
Test().run()
выход