#python-3.x #kivy
#python-3.x #kivy
Вопрос:
У меня возникла проблема, которая заключается в том, что при нажатии кнопки «Получить экран случайного цвета» он должен добавить виджет экрана и переключиться на экран с именем «new_screen». Вместо этого он выдает мне сообщение об ошибке, в котором говорится, что нет экрана с именем «new_screen.
from kivy.app import App
from kivy.base import runTouchApp
from kivy.lang import Builder
from kivy.properties import ListProperty
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
import time
import random
class FirstScreen(Screen):
pass
class SecondScreen(Screen):
pass
class ColourScreen(Screen):
colour = ListProperty([1., 0., 0., 1.])
class MyScreenManager(ScreenManager):
def new_colour_screen(self):
self.add_widget(ColourScreen(name="new_screen",colour=[random.random() for _ in range(3)] [1]))
self.current = "new_screen"
root_widget = Builder.load_string('''
#:import FadeTransition kivy.uix.screenmanager.FadeTransition
MyScreenManager:
transition: FadeTransition()
FirstScreen:
SecondScreen:
<FirstScreen>:
name: 'first'
BoxLayout:
orientation: 'vertical'
Label:
text: 'first screen!'
font_size: 30
Image:
source: 'colours.png'
allow_stretch: True
keep_ratio: False
BoxLayout:
Button:
text: 'goto second screen'
font_size: 30
on_release: app.root.current = 'second'
Button:
text: 'get random colour screen'
font_size: 30
on_release: app.root.new_colour_screen()
<SecondScreen>:
name: 'second'
BoxLayout:
orientation: 'vertical'
Label:
text: 'second screen!'
font_size: 30
Image:
source: 'colours2.png'
allow_stretch: True
keep_ratio: False
BoxLayout:
Button:
text: 'goto first screen'
font_size: 30
on_release: app.root.current = 'first'
Button:
text: 'get random colour screen'
font_size: 30
on_release: app.root.new_colour_screen()
<ColourScreen>:
BoxLayout:
orientation: 'vertical'
Label:
text: 'colour {:.2},{:.2},{:.2} screen'.format(*root.colour[:3])
font_size: 30
Widget:
canvas:
Color:
rgba: root.colour
Ellipse:
pos: self.pos
size: self.size
BoxLayout:
Button:
text: 'goto first screen'
font_size: 30
on_release: app.root.current = 'first'
Button:
text: 'get random colour screen'
font_size: 30
on_release: app.root.new_colour_screen()
''')
class ScreenManagerApp(App):
def build(self):
return root_widget
ScreenManagerApp().run()
Комментарии:
1. Кажется, у меня работает. Обратите внимание, что если вы нажмете на свою
get random colour screen
кнопку более одного раза, вы создадите несколькоColourScreens
с одним и тем жеname
именем. Не очень хорошая идея.2. Почему он все еще выдает мне ошибку >< есть ли что-нибудь, что я должен проверить?
3. Странно. Попробуйте заменить содержимое вашего
new_colour_screen()
метода всего одной строкой:self.switch_to(ColourScreen(name="new_screen",colour=[random.random() for _ in range(3)] [1]))
.4. Это работает, еще раз спасибо