Привет, я, кажется, не понимаю, как работать с идентификаторами в kivy и python

#python #kivy

#python #kivy

Вопрос:

В принципе, у меня есть кнопка, и когда вы нажимаете ее, и как только выполняется определенное условие, другая кнопка должна «исчезнуть» (путем уменьшения ее size_hint до 0). Но это не работает и говорит мне, что объект ‘NormalGame’ не имеет атрибута ‘v1’. Любая помощь приветствуется, спасибо!

Вот кнопка в файле kv:


 <NormalGame>:
    name: "ngame"
    FloatLayout:

        Button:
            id: v1
            pos_hint: {"x": 0.66, "y": 0.725}
            size_hint: (0.01, 0.01)
            text: "V"
            on_release:
                root.btn_action_v1()
 

И вот файл py:

 class NormalGame(Screen):  
    def btn_action_v1(self):
        v1 = self.ids.v1
        if players_combination == colour_combination:
            print("you won")
        else:
            players_combination.clear()
            self.v1.size_hint = 0, 0
 

Вот код ошибки:

  Traceback (most recent call last):
   File "c:/Users/edgar/Desktop/python projects/flappy bird/main.py", line 725, in <module>
     MyMainApp().run()
   File "C:UsersedgarAppDataLocalProgramsPythonPython37libsite-packageskivyapp.py", line 855, in run
     runTouchApp()
   File "C:UsersedgarAppDataLocalProgramsPythonPython37libsite-packageskivybase.py", line 504, in runTouchApp
     EventLoop.window.mainloop()
   File "C:UsersedgarAppDataLocalProgramsPythonPython37libsite-packageskivycorewindowwindow_sdl2.py", line 747, in mainloop
     self._mainloop()
   File "C:UsersedgarAppDataLocalProgramsPythonPython37libsite-packageskivycorewindowwindow_sdl2.py", line 479, in _mainloop
     EventLoop.idle()
   File "C:UsersedgarAppDataLocalProgramsPythonPython37libsite-packageskivybase.py", line 342, in idle
     self.dispatch_input()
   File "C:UsersedgarAppDataLocalProgramsPythonPython37libsite-packageskivybase.py", line 327, in dispatch_input
     post_dispatch_input(*pop(0))
   File "C:UsersedgarAppDataLocalProgramsPythonPython37libsite-packageskivybase.py", line 293, in post_dispatch_input
     wid.dispatch('on_touch_up', me)
   File "kivy_event.pyx", line 707, in kivy._event.EventDispatcher.dispatch
   File "C:UsersedgarAppDataLocalProgramsPythonPython37libsite-packageskivyuixbehaviorsbutton.py", line 179, in on_touch_up
     self.dispatch('on_release')
   File "kivy_event.pyx", line 703, in kivy._event.EventDispatcher.dispatch
   File "kivy_event.pyx", line 1214, in kivy._event.EventObservers.dispatch
   File "kivy_event.pyx", line 1098, in kivy._event.EventObservers._dispatch
   File "C:UsersedgarAppDataLocalProgramsPythonPython37libsite-packageskivylangbuilder.py", line 64, in custom_callback
     exec(__kvlang__.co_value, idmap)
   File "c:UsersedgarDesktoppython projectsflappy birdrls.kv", line 139, in <module>
     root.btn_action_v1()
   File "c:/Users/edgar/Desktop/python projects/flappy bird/main.py", line 684, in btn_action_v1
     self.v1.size_hint = 0, 0
 AttributeError: 'NormalGame' object has no attribute 'v1'
 

Ответ №1:

Атрибута the нет v1 NormalGame , но есть созданная вами локальная переменная v1 . Попробуйте изменить:

 self.v1.size_hint = 0, 0
 

Для:

 v1.size_hint = 0, 0