Kivy 教程

Kivy - 主页

Kivy 基础知识

Kivy - 入门 Kivy - 安装 Kivy - 架构 Kivy - 文件语法 Kivy - 应用程序 Kivy - Hello World Kivy - 应用生命周期 Kivy - 事件 Kivy - 属性 Kivy - 输入 Kivy - 行为

Kivy 按钮

Kivy - 按钮 Kivy - 按钮事件 Kivy - 按钮颜色 Kivy - 按钮大小 Kivy - 按钮位置 Kivy - 圆形按钮 Kivy - 禁用按钮 Kivy - 图片按钮

Kivy 小部件

Kivy -小部件 Kivy - 标签 Kivy - 文本输入 Kivy - 画布 Kivy - 线条 Kivy - 复选框 Kivy - 下拉列表 Kivy - 窗口 Kivy - ScrollView Kivy - 轮播 Kivy - 滑块 Kivy - 图像 Kivy - 弹出窗口 Kivy - 开关 Kivy - 旋转器 Kivy - 拆分器 Kivy - 进度条 Kivy - 气泡 Kivy - 选项卡式面板 Kivy - 散点图 Kivy - 手风琴 Kivy - 文件选择器 Kivy - 颜色选择器 Kivy - 代码输入 Kivy - 模态视图 Kivy - 切换按钮 Kivy - 相机 Kivy - 树形视图 Kivy - reStructuredText Kivy - 操作栏 Kivy - 视频播放器 Kivy - 模板视图 Kivy - VKeyboard Kivy - 触摸涟漪 Kivy - 音频 Kivy - 视频 Kivy - 拼写 Kivy - 效果 Kivy - 输入记录器 Kivy - OpenGL Kivy - 文本 Kivy - 文本标记 Kivy - 设置

Kivy 布局

Kivy - 布局 Kivy - 浮动布局 Kivy - 网格布局 Kivy - 框布局 Kivy - 堆栈布局 Kivy - 锚点布局 Kivy - 相对布局 Kivy - 页面布局 Kivy - 循环布局 Kivy - 布局中的布局

Kivy 高级概念

Kivy - 配置对象 Kivy - Atlas Kivy - 数据加载器 Kivy - 缓存管理器 Kivy - 控制台 Kivy - 动画 Kivy - MultiStroke Kivy - 时钟 Kivy - SVG Kivy - UrlRequest Kivy - 剪贴板 Kivy - 工厂 Kivy - 手势 Kivy - 语言 Kivy - 图形 Kivy - 绘图 Kivy - 打包 Kivy - Garden Kivy - 存储 Kivy - 矢量 Kivy - Utils Kivy - Inspector 工具 Kivy - 工具 Kivy - 日志 Kivy - 帧缓冲区

Kivy 应用程序和项目

Kivy - 绘图应用程序 Kivy - 计算器应用程序 Kivy - 秒表应用程序 Kivy - 相机处理 Kivy - 图像查看器 Kivy - 贝塞尔曲线 Kivy - 画布应力 Kivy - 圆形绘制 Kivy - 小部件动画 Kivy - 杂项

Kivy - Popup

Kivy 中的 Popup 小部件会显示一个对话框,该对话框显示在主 Prent 窗口上,通常响应按钮单击事件。对话框用于多种用途,例如向用户显示某条消息、让用户输入某些输入或要求用户确认特定操作。

一般而言,任何 GUI 应用程序中的对话框都有两种类型:模态对话框和非模态对话框。不允许用户与父窗口交互而不与父窗口交互的对话框称为模态对话框。另一方面,如果用户可以在不与对话框交互的情况下关闭对话框,则它就是非模态对话框。

在 Kivy 中,弹出对话框默认覆盖整个父窗口。如何根据需要配置其大小。

Popup 类在"kivy.uix.popup"模块中定义。

from kivy.uix.popup import Popup
popup = Popup(**kwargs)

Popup 对象预先配置了具有标题和分隔栏的布局。我们可以通过将其他小部件添加到其布局参数来自定义布局。

以下代码片段在父窗口上生成一个简单的弹出窗口 −

from kivy.uix.popup import Popup
popup = Popup(title='Popup Demo',
   content=Label(text='This is a Popup'),
   size_hint=(None, None), size=(400, 400))

您需要调用 Popup 对象的 open() 方法来显示它。

popup.open()

当弹出窗口显示时,任何点击它外部的操作都会关闭它。要防止弹出窗口自动关闭,请将 auto_dismiss 属性设置为 False。您需要明确调用 popup.dismiss() 方法。通常,这是通过将其绑定到按钮的 on_press 事件来完成的。

class popdemo(App):
   def build(self):
      btn = Button(text="Click here")
      btn.bind(on_press=self.onButtonPress)
      return btn
   
   def onButtonPress(self, button):
      layout = GridLayout(cols=1)
      lbl = Label(text='Hello world')
      closeButton = Button(text="OK")
      layout.add_widget(lbl)
      layout.add_widget(closeButton)
      popup = Popup(
         title='Popup Demo', content=layout,
         auto_dismiss=False, size_hint=(None, None),
         size=(400, 400)
      )
      popup.open()
      closeButton.bind(on_press=self.on_close)
   
   def on_close(self, event):
      self.popup.dismiss()

单击标题为"单击此处"的按钮时,您将看到如下所示的弹出对话框 −

Kivy Popup

按弹出窗口上的"确定"按钮将其关闭。

Popup 类定义以下属性 −

  • content − 显示在标题下方的弹出窗口的内容。content 是一个 ObjectProperty,默认为 None。

  • title − 表示弹出窗口标题的字符串。 title 是一个 StringProperty,默认为"无标题"。

Popup 对象响应以下事件 −

  • on_open − 当 Popup 打开时触发。

  • on_dismiss − 当 Popup 关闭时触发。如果回调返回 True,则取消关闭。

示例

以下代码给出了 Kivy 中 Popup 对话框的一个很好的例子。首先,我们在父窗口的垂直框布局中添加一个标签和一个按钮。单击按钮会弹出一个带有文本输入的单列网格布局,要求用户输入姓名。当弹出窗口关闭时,文本用于更改父窗口的标签。

以下是完整代码

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.gridlayout import GridLayout
from kivy.uix.popup import Popup
from kivy.core.window import Window

Window.size = (720, 400)

class PopupExample(App):
   def build(self):
      self.layout = GridLayout(cols=1, padding=10)
      
      self.l1 = Label(
         text='enter your name', font_size=32,
         color=[.8, .6, .4, 1]
      )
      self.layout.add_widget(self.l1)
      
      self.button = Button(text="Click Here")
      self.layout.add_widget(self.button)
      self.button.bind(on_press=self.onButtonPress)
      return self.layout
   
   def onButtonPress(self, button):
      layout = GridLayout(cols=1, padding=10)
      
      popupLabel = Label(text="Enter name")
      self.t1 = TextInput()
      closeButton = Button(text="OK")
      
      layout.add_widget(popupLabel)
      layout.add_widget(self.t1)
      layout.add_widget(closeButton)
      
      self.popup = Popup(
         title='Hello', content=layout,
         auto_dismiss=False, size_hint=(None, None),
         size=(200, 200)
      )
      self.popup.open()
      closeButton.bind(on_press=self.on_close)
   
   def on_close(self, event):
      self.l1.text = 'Thanks ' + self.t1.text
      self.popup.dismiss()
PopupExample().run()

输出

应用程序窗口显示如下 −

Kivy 弹出对话框