#python #function #kivy
#python #функция #kivy
Вопрос:
Я пытаюсь выполнить sth с помощью диспетчера экранов в Kivy, но я запутался в том, как его использовать: (
я хочу вызвать функцию Update()
с помощью Clock.schedule_interval , но когда я нажимаю кнопку вверху слева, она показывает ошибку AttributeError: 'NoneType' object has no attribute 'current'
, я думаю, это из-за main
возврата: (поэтому хочу спросить, как вызвать функцию и вернуть ее при использовании диспетчера экранов : ) спасибо
.py
kivy.lang.Builder.load_string(
"""
#:kivy 2.0.0
<SettingScreen>:
Button:
text: "Go Back"
on_release:
root.manager.current = 'main'
root.manager.transition.direction = 'left'
<MainScreen>:
background_color: 0, 0, 0
FloatLayout:
Button:
id: go_setting_button
size_hint: .15, .15
background_color: root.background_color
center_y: root.height - self.size[1] /4
on_release:
root.manager.current = 'setting'
root.manager.transition.direction = 'right'
canvas:
Color:
rgb: 0.5, 0.5, 0.5
Ellipse:
pos: self.size[0] /4, self.pos[1]
size: self.size[0] /2, self.size[0] /2
source: 'setting.jpg'
Label:
id: center_label
text: "Hello World !"
font_size: 25
center: root.center
markup: True
""")
# class SettingScreen ##############################################################################
class SettingScreen(Screen):
pass
# class MainScreen #################################################################################
class MainScreen(Screen):
def Update(self, dt):
self.ids.center_label.text = "ASDFASDFASD"
self.ids.center_label.center = self.center
####################################################################################################
class MyFirstApp(App):
def build(self):
self.title = "My First Kivy App"
screen_manager = ScreenManager()
screen_manager.add_widget(MainScreen(name = 'main'))
screen_manager.add_widget(SettingScreen(name = 'setting'))
main = MainScreen()
Clock.schedule_interval(main.Update, 1.0/60.0) #
return screen_manager and main #
if __name__ == "__main__":
MyFirstApp().run()
Ответ №1:
Проблема в том, как вы создаете свое приложение. Ваш код создает два экземпляра MainScreen
, только один является частью вашего графического интерфейса. Вот модифицированная версия вашего build()
метода
def build(self):
self.title = "My First Kivy App"
screen_manager = ScreenManager()
main = MainScreen(name='main') # Only make one MainScreen
screen_manager.add_widget(main) # add the one MainScreen to the GUI
# screen_manager.add_widget(MainScreen(name='main'))
screen_manager.add_widget(SettingScreen(name='setting'))
# main = MainScreen() # this creates another instance of MainScreen
Clock.schedule_interval(main.Update, 1.0 / 60.0) #
return screen_manager # can only return one widget (the root of your GUI)
Комментарии:
1. oic ~ спасибо, что ответили мне : ) теперь я понял 🙂