我想在 Python/KivyMD 中更改屏幕后立即打开 MDDialog
I want to open MDDialog right after screen is changed in Python/KivyMD
它是用 python 3.9.6
、kivy 2.0.0rc4
和 kivymd 0.104.2
制作的。我想在播放器更改屏幕(从 "NextWindow"
到 "BeginNames"
)后立即打开没有 按钮的 MDDialog 。所以基本上 MDDialog
应该在玩家进入 "BeginNames"
屏幕后立即打开。我认为这会相当容易。我只是不知道该怎么做。我无法在 google 中查找。这是我的 python
代码:
kv = '''
#:import Factory kivy.factory.Factory
<ItemConfirm>
divider: None
CheckboxLeftWidget:
id: check
score: root.text
group: "check"
on_active: app.check_active(self.group)
<ConfirmButton@MDRectangleFlatButton>:
text: 'CONFIRM'
text_color: 255/255, 255/255, 0, 1
disabled: not app.active
on_release: app.score_limit()
<ConfirmDialog>:
title: "Score Limit"
bg_color: (5, 0, 0)
type: "confirmation"
auto_dismiss: False
items:
[Factory.ItemConfirm(text="30"),
Factory.ItemConfirm(text="40"),
Factory.ItemConfirm(text="50"),
Factory.ItemConfirm(text="60")]
buttons: [ Factory.ConfirmButton() ]
'''
class NextWindow(MDFloatLayout):
def twoteams_off(self):
self.ids.my_2.source = 'icons/2teams.png'
myapp.screen_manager.transition = SlideTransition(direction='left', duration=.25)
myapp.screen_manager.current = 'BeginNames'
class BeginNames(MDFloatLayout):
pass
class MyApp(MDApp):
def build(self):
Builder.load_string(kv)
self.screen_manager = ScreenManager()
self.nextwindow = NextWindow()
screen = Screen(name='Second')
screen.add_widget(self.nextwindow)
self.screen_manager.add_widget(screen)
self.beginnames = BeginNames()
screen = Screen(name='BeginNames')
screen.add_widget(self.beginnames)
self.screen_manager.add_widget(screen)
你可以使用Screen
的on_enter()
方法来完成你想要的:
class MyApp(MDApp):
def build(self):
Builder.load_string(kv)
self.screen_manager = ScreenManager()
self.nextwindow = NextWindow()
screen = Screen(name='Second')
screen.add_widget(self.nextwindow)
self.screen_manager.add_widget(screen)
self.beginnames = BeginNames()
screen = Screen(name='BeginNames')
screen.on_enter = self.open_dialog # set code to be run whenever this Screen is entered
screen.add_widget(self.beginnames)
self.screen_manager.add_widget(screen)
return self.screen_manager # missing from your code
def open_dialog(self, *args):
# code to open dialog
print('open dialog')
它是用 python 3.9.6
、kivy 2.0.0rc4
和 kivymd 0.104.2
制作的。我想在播放器更改屏幕(从 "NextWindow"
到 "BeginNames"
)后立即打开没有 按钮的 MDDialog 。所以基本上 MDDialog
应该在玩家进入 "BeginNames"
屏幕后立即打开。我认为这会相当容易。我只是不知道该怎么做。我无法在 google 中查找。这是我的 python
代码:
kv = '''
#:import Factory kivy.factory.Factory
<ItemConfirm>
divider: None
CheckboxLeftWidget:
id: check
score: root.text
group: "check"
on_active: app.check_active(self.group)
<ConfirmButton@MDRectangleFlatButton>:
text: 'CONFIRM'
text_color: 255/255, 255/255, 0, 1
disabled: not app.active
on_release: app.score_limit()
<ConfirmDialog>:
title: "Score Limit"
bg_color: (5, 0, 0)
type: "confirmation"
auto_dismiss: False
items:
[Factory.ItemConfirm(text="30"),
Factory.ItemConfirm(text="40"),
Factory.ItemConfirm(text="50"),
Factory.ItemConfirm(text="60")]
buttons: [ Factory.ConfirmButton() ]
'''
class NextWindow(MDFloatLayout):
def twoteams_off(self):
self.ids.my_2.source = 'icons/2teams.png'
myapp.screen_manager.transition = SlideTransition(direction='left', duration=.25)
myapp.screen_manager.current = 'BeginNames'
class BeginNames(MDFloatLayout):
pass
class MyApp(MDApp):
def build(self):
Builder.load_string(kv)
self.screen_manager = ScreenManager()
self.nextwindow = NextWindow()
screen = Screen(name='Second')
screen.add_widget(self.nextwindow)
self.screen_manager.add_widget(screen)
self.beginnames = BeginNames()
screen = Screen(name='BeginNames')
screen.add_widget(self.beginnames)
self.screen_manager.add_widget(screen)
你可以使用Screen
的on_enter()
方法来完成你想要的:
class MyApp(MDApp):
def build(self):
Builder.load_string(kv)
self.screen_manager = ScreenManager()
self.nextwindow = NextWindow()
screen = Screen(name='Second')
screen.add_widget(self.nextwindow)
self.screen_manager.add_widget(screen)
self.beginnames = BeginNames()
screen = Screen(name='BeginNames')
screen.on_enter = self.open_dialog # set code to be run whenever this Screen is entered
screen.add_widget(self.beginnames)
self.screen_manager.add_widget(screen)
return self.screen_manager # missing from your code
def open_dialog(self, *args):
# code to open dialog
print('open dialog')