Объект 'RootLayout' не имеет атрибута 'image' - PullRequest
0 голосов
/ 04 июля 2019

Я создал программу с Kivy , чтобы получить случайное изображение при нажатии кнопки. Я написал код, но когда я хочу изменить источник, я получаю следующую ошибку: AttributeError: 'RootLayout' object has no attribute 'image'

Python:

class MinimalApp(App):
    images_defenders2 = list(images_defenders)
    title = 'My App'
    def build(self):
        number = random.randrange(0, length_code_list1)
        img = (images_attackers[number]) #The variable with the random photo
        print(img)
        root = RootLayout()
        return(root)
class RootLayout(AnchorLayout):
   def say_hello(self):
       def callback(self):
           fonte = StringProperty('tachanka2.jpg')
           self.image.source = (fonte)
           self.image.fonte = "tachanka2.jpg"
       callback(self)  
   pass

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

киловольт:

#:kivy 1.7.2
#:import kivy kivy
#:import random random

<RootLayout>:
    anchor_x: 'center'                              
    anchor_y: 'center'
    Image:
        id: image
        source: 'nokk.png'
        size: self.texture_size
   AnchorLayout:
        anchor_x: 'left'
        anchor_y: 'bottom'

    Button:
        text: 'Attacco'
        size_hint: 0.5, 0.2
        font_size:64
        on_press: {root.say_hello()}
   AnchorLayout:
    anchor_x: 'right'
    anchor_y: 'bottom'

    Button:
        text: 'Difesa'
        size_hint: 0.5, 0.2
        font_size:64

Я попытался изменить источник непосредственно в файле kv, и мне это удалось, но мне нужно изменить его в файле python, потому что мне нужно создать функцию, которая выдает случайную фотографию из списка и помещает ее в переменную. Затем эта переменная ставится в качестве источника изображения. Поэтому, пожалуйста, помогите мне понять, почему возникает эта ошибка и как ее исправить. Кусок кода, который вызывает эту ошибку:

class RootLayout(AnchorLayout):
    def say_hello(self):
        def callback(self):
            fonte = StringProperty('tachanka2.jpg')
            self.image.source = (fonte)
            self.image.fonte = "tachanka2.jpg"
        callback(self)  
    pass

1 Ответ

0 голосов
/ 04 июля 2019

Проблема

AttributeError: у объекта 'RootLayout' нет атрибута 'image'

Основная причина

Атрибут / переменная, imageне существует в объекте RootLayout / AnchorLayout.

Решение

image - это id, назначенный виджету Image в вашем файле kv.Поэтому, чтобы получить доступ к этому Image объекту в коде Python, вам нужно добавить ids

  • Заменить self.image.source на self.ids.image.source
  • Удалить self.image.fonte = "tachanka2.jpg", поскольку существуетбез атрибута, fonte в Image виджет
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...