У меня была ошибка en с этим кодом, который включает Kivy

#python #kivy

#python #kivy

Вопрос:

 from kivymd.app import MDApp
from kivymd.uix.screen import Screen
from kivymd.uix.button import MDFlatButton

class DemoApp(MDApp):

    def build(self):
        screen = Screen()
        btn_flat = MDFlatButton(text='Hello World')
        screen.add_widget(btn_flat)
        return btn_flat


DemoApp().run()
  

Я думаю, что я импортирую неправильный модуль или что-то в этом роде.

Это первый раз, когда я использую Kivy.

Когда я запускаю код, он открывает окно, но сразу же закрывает окно.

После этого он выдает мне эту ошибку.

Спасибо всему сообществу StackOverflow

Ниже приведена ошибка

  Traceback (most recent call last):
   File "C:/Users/Toshiba/Desktop/python_temelleri/Kivy.py", line 14, in <module>
     DemoApp().run()
   File "C:UsersToshibaDesktoppython_temellerivenvlibsite-packageskivyapp.py", line 837, in run
     Window.add_widget(self.root)
   File "C:UsersToshibaDesktoppython_temellerivenvlibsite-packageskivycorewindow__init__.py", line 1297, in add_widget
     (widget, widget.parent)
 kivy.uix.widget.WidgetException: Cannot add <kivymd.uix.button.MDFlatButton object at 0x000000296765DF98> to window, it already has a parent <Screen name=''>

  

Комментарии:

1. Я нашел ошибку. Я просто ввожу btn_flat в возвращаемую часть, но я бы ввел screen. Но в любом случае, если кто-нибудь ответит с той же ошибкой, теперь вы знаете ответ.

Ответ №1:

Проблема в том, что код kivy App делает:

         Window.add_widget(self.root)
  

где self.root — это все, что возвращается вашим build() методом. Так что, если ваш build() метод делает

 screen.add_widget(btn_flat)
  

и

 return btn_flat
  

Тогда приведенный выше код из kivy App выдаст ошибку, так как btn_flat уже является дочерним для screen . Ваш build() метод, вероятно, должен быть:

 def build(self):
    screen = Screen()
    btn_flat = MDFlatButton(text='Hello World')
    screen.add_widget(btn_flat)
    return screen