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 - Scatter 小部件

Kivy 中的 Scatter 小部件对于多点触控设备特别有用,它用于旋转和放大/缩小应用程序窗口的内容。

Scatter 小部件通过在绘制子项之前更改模型视图矩阵来执行矩阵变换,并在绘制完成后恢复先前的矩阵,以便可以在整个子树上执行旋转、缩放和平移而无需更改任何小部件属性。

默认情况下,Scatter 小部件没有图形表示:它只是一个容器。其他小部件被添加到散点对象。但是,应该注意的是,Scatter 小部件不是布局。您必须自己管理子项的大小。它们相对于散点图定位,类似于 RelativeLayout。这就是为什么拖动散点图不会改变子项的位置,只有散点图的位置会改变。散点图大小不会影响其子项的大小。

Scatter 类在"kivy.uix.scatter"模块中定义。Scatter 小部件的基本用法如下 −

from kivy.uix.scatter import Scatter
scatter=Scatter.add_widget(Image(source='logo.jpg'))

Scatter 对象默认启用所有交互。但是,您可能希望自定义交互,为此必须相应地定义 Scatter 对象的属性。

  • auto_bring_to_front − 如果为 True,小部件将自动推到父小部件列表的顶部进行绘制。

  • do_rotation − 允许旋转。默认情况下,此属性为 True。

  • do_scale − 允许缩放。默认为 True。

  • do_translation − 允许在 X 或 Y 轴上平移。

  • scale − 散点图的 Scale 值。scale 是 AliasProperty,默认为 1.0。

  • scale_max − 允许的最大缩放因子。允许的最大缩放的默认值最高为 1e20。

  • scale_min − 允许的最小缩放因子,默认值为 0.01

示例 1

以下是 Scatter 小部件如何工作的简单示例。我们刚刚在 Kivy 应用程序中的 Scatter 小部件中添加了一个标签。应用程序启动时,标签文本出现在应用程序窗口的左下角。使用鼠标将其拖动到窗口表面的任意位置。

要在普通桌面上模拟多点触控操作,请右键单击标签区域,创建两个标记,然后通过拖动这两个标记来放大或旋转标签。

如果您使用的是多点触控设备,则可以通过两根手指触摸执行缩放和旋转。

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.scatter import Scatter
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.textinput import TextInput
from kivy.core.window import Window

Window.size = (720,350)

class scatterdemoapp(App):
   def build(self):
      box=BoxLayout(orientation='vertical')
      scatr=Scatter()
      lbl=Label(text="Hello", font_size=60)
      scatr.add_widget(lbl)
      box.add_widget(scatr)
      return box

scatterdemoapp().run()

输出

让我们看看输出是什么样子的 −

kivy scatter

示例 2

或者,"kv"语言脚本也可用于构造相同的外观。

BoxLayout:
   orientation:'vertical'
   Scatter:
      Label:
         text:"Hello"
         font_size:60

让我们为上述示例添加更多交互性。在这里,我们在 Scatter 小部件上方的垂直框布局中添加了一个文本输入框。

"text"属性绑定到标签的 text 属性。因此,当您在文本框中添加/删除字母时,标签文本会更新。所有散点操作(如旋转和缩放)仍可执行。

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.scatter import Scatter
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.textinput import TextInput
from kivy.core.window import Window

Window.size = (720,300)

class scatterdemoapp(App):
   def build(self):
      box = BoxLayout(orientation='vertical')
      text1 = TextInput(
         text='Hello World', height=100,
         size_hint=(Window.width, None)
      )
      box.add_widget(text1)
      scatr = Scatter()
      self.lbl = Label(text="Hello", font_size=60)
   
      text1.bind(text=self.lbl.setter('text'))
      scatr.add_widget(self.lbl)
      box.add_widget(scatr)
      return box
   
scatterdemoapp().run()

输出

现在让我们检查一下输出窗口是什么样子的 −

Kivy Scatter Hello