#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