Kivy - 模态视图



Kivy 框架中的 ModalView 组件用于在父窗口上弹出对话框。ModalView 组件的行为类似于 Kivy 的 Popup 组件。事实上,Popup 类本身就是 ModalView 类的子类,具有一些额外的功能,例如具有标题和分隔符。

默认情况下,Modalview 的大小等于“主”窗口的大小。组件的 size_hint 默认值为 (1, 1)。如果您不希望您的视图全屏显示,可以使用小于 1 的 size_hint 值(例如 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'))

与 Popup 一样,当您单击 ModalView 对话框外部时,它将被关闭。要阻止此行为,请将 auto-dismiss 设置为 False。

要使 ModalView 对话框出现,您需要调用其 open() 方法。

view.open()

如果 auto_dismiss 为 False,则需要调用其 dismiss() 方法来关闭它。

view.dismiss()

通常,open() 和 dismiss() 方法都在某个事件(例如按钮的 on_press 事件)上调用。您通常在单击父窗口上的按钮时打开 ModalView,并在单击 ModalView 布局中的按钮时关闭它。

ModalView 事件

ModalView 在视图打开和关闭之前以及视图打开和关闭时发出事件。

  • on_pre_open - 在 ModalView 打开之前触发。当此事件触发时,ModalView 尚未添加到窗口中。

  • on_open - ModalView 打开时触发。

  • on_pre_dismiss - 在 ModalView 关闭之前触发。

  • on_dismiss - ModalView 关闭时触发。如果回调返回 True,则关闭操作将被取消。

示例

以下代码展示了一个易于实现的 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()

输出

当单击主应用程序窗口上的按钮时,将弹出 ModalView 对话框。

kivy modal view
广告