Kivy 简明教程
Kivy - Modal View
Kivy 框架中的 ModalView 小部件用于在父窗口顶部弹出一个对话框。ModalView 小部件的行为类似于 Kivy 的 Popup 小部件。事实上,Popup 类本身是 ModalView 类的子类,具有某些附加功能,例如具有标题和分隔符。
默认情况下,Modalview 的大小等于“main”窗口的大小。小部件的大小提示=(1, 1) 为默认值。如果您不想让您的视图全屏显示,请使用值低于 1 的大小提示(例如 size_hint=(.8, .8)),或将 size_hint 设置为 None 并使用固定大小属性。
ModalView 类在 kivy.uix.modalview import ModalView 模块中定义。以下语句将生成一个 ModalView 对话框:
from kivy.uix.modalview import ModalView
view = ModalView(size_hint=(None, None), size=(300, 200))
view.add_widget(Label(text='ModalView Dialog'))
与弹出窗口类似,当你在 ModalView 对话框外部点击时,它会被关闭。要阻止这种行为,将自动关闭设为 False。
要使 ModalView 对话框出现,你需要调用其 open() 方法。
view.open()
如果自动关闭为 False,你需要调用其 dismiss() 方法来关闭它。
view.dismiss()
正常情况下, open() 和 dismiss() 方法都会在特定事件中被调用,例如按钮的 on_press 事件中。当点击父窗口上的某个按钮时,你通常会打开 ModalView,当点击 ModalView 布局中的某个按钮时,会将其关闭。
ModalView Events
ModalView 在视图打开和关闭之前以及视图打开和关闭时会发出事件。
-
on_pre_open − 在 ModalView 打开之前触发。在触发此事件时,ModalView 尚未添加到窗口。
-
on_open − 当 ModalView 打开时触发。
-
on_pre_dismiss − 在 ModalView 关闭之前触发。
-
on_dismiss − 当 ModalView 关闭时触发。如果回调返回 True,则将取消关闭。
Example
以下代码提供了一个易于实现的 ModalView 对话框示例。主应用程序窗口显示按钮标题为“单击此处”。单击时,会弹出一个模态对话框。
通过在网格布局中放置一个标签和一个按钮来构建 ModalView。在弹出窗口上,有一个按钮,其标题为“确定”。其 on_press 事件绑定到 ModalView 对象的 dismiss() 方法,导致它消失。
该示例的完整代码如下:
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.modalview import ModalView
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.gridlayout import GridLayout
from kivy.core.window import Window
Window.size = (720, 300)
class ModalViewDemoApp(App):
def showmodal(self, obj):
view = ModalView(
auto_dismiss=False, size_hint=(None, None),
size=(400, 100)
)
grid = GridLayout(cols=1, padding=10)
grid.add_widget(Label(
text='ModalView Popup', font_size=32,
color=[1, 0, 0, 1]
))
btn = Button(
text='ok', font_size=32,
on_press=view.dismiss
)
grid.add_widget(btn)
view.add_widget(grid)
view.open()
def build(self):
btn = Button(
text='click here', font_size=32,
on_press=self.showmodal,
pos_hint={'center_x': .5, 'center_y': .1},
size_hint=(.3, None), size=(200, 100)
)
return btn
ModalViewDemoApp().run()