Python: как установить идентификатор кнопки - PullRequest
0 голосов
/ 30 апреля 2018

Я использую python-2.7 и kivy-1.9.0. Может кто-нибудь сказать мне, как установить id кнопки? Я пытаюсь установить идентификатор test кнопки, используя этот код.

btn1 = Button(text="Close",id="test")

но выдает ошибку 'Alert' object has no attribute 'test'

test.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()
        self.test.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()

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Определить идентификатор кнопки

У вас есть правильный способ присвоения 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() выход

Img01

0 голосов
/ 30 апреля 2018

Если вы ищете id для использования кнопки в более поздних случаях, вы можете использовать ее любым способом, просто сделайте,

from kivy.uix.screenmanager import Screen
from kivy.app import App
from kivy.lang import Builder`enter code here`
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):
    btn1 = Button(text="Close") 
    def __init__(self, title,btn1, text):
        super(Alert, self).__init__()
        self.btn1 = btn1
        box = BoxLayout(orientation='vertical', padding=(5))
        box.add_widget(Label(text=text))
        box.add_widget(self.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()
        self.test.background_color = [0, 0, 1, 0.5]


class Test(App):
    def build(self):
        change_button = Button(text="Close")
        Alert(title='yeah!',btn1=change_button, text='inputs are invalid')
        return


if __name__ == '__main__':
    Test().run()
...