- 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 - 滚动视图
- 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 - 虚拟键盘
- 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 - 图集
- Kivy - 数据加载器
- Kivy - 缓存管理器
- Kivy - 控制台
- Kivy - 动画
- Kivy - 多笔画
- Kivy - 时钟
- Kivy - SVG
- Kivy - UrlRequest
- Kivy - 剪贴板
- Kivy - 工厂
- Kivy - 手势
- Kivy - 语言
- Kivy - 图形
- Kivy - 绘图
- Kivy - 打包
- Kivy - Garden
- Kivy - 存储
- Kivy - 矢量
- Kivy - 工具函数
- Kivy - 检查器
- Kivy - 工具
- Kivy - 日志记录器
- Kivy - 帧缓冲区
- Kivy 应用和项目
- Kivy - 绘图应用
- Kivy - 计算器应用
- Kivy - 计时器应用
- Kivy - 相机处理
- Kivy - 图片查看器
- Kivy - 贝塞尔曲线
- Kivy - 画布压力测试
- Kivy - 圆形绘制
- Kivy - 组件动画
- Kivy - 其他
- Kivy 有用资源
- Kivy - 快速指南
- Kivy - 有用资源
- Kivy - 讨论
Kivy - 模板视图
Kivy 库中的 StencilView 组件限制了添加到它的其他子组件的画布区域。任何试图在模板视图区域之外绘制的指令都将被裁剪。
StencilView 组件内部使用了模板图形指令。它提供了一种高效的方式来裁剪子组件的绘图区域。
StencilView 类定义在 "kivy.uix.stencilview" 模块中。
from kivy.uix.stencilview import StencilView
需要注意的是,StencilView 不是布局。因此,要向 StencilView 添加组件,必须组合使用 StencilView 和布局才能实现布局的行为。此外,不能向 StencilView 添加超过 128 个支持模板的组件。
StencilView 的一般用法如下:
st = StencilView(size=(x,y)) w = Widget() st.add_widget(w)
为了理解 StencilView 如何精确地限制组件的可绘制区域,让我们首先执行某些图形绘制指令,然后使用 StencilView 来查看区别。
示例
在下面的代码中,mywidget 类扩展了 Widget 类,并在随机位置和随机 RGB 值下绘制 200 个圆圈。(这还没有使用 StencilView)
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.graphics import *
import random
from kivy.core.window import Window
Window.size = (720, 350)
class mywidget(Widget):
def __init__(self, *args):
super().__init__(*args)
for i in range(200):
colorR = random.randint(0, 255)
colorG = random.randint(0, 255)
colorB = random.randint(0, 255)
posx = random.randint(0, Window.width)
posy = random.randint(0, Window.height)
self.canvas.add(Color(rgb=(colorR / 255.0, colorG / 255.0, colorB / 255.0)))
d = 30
self.canvas.add(Ellipse(pos=(posx, posy), size=(d, d)))
class circlesapp(App):
def build(self):
w = mywidget()
return w
circlesapp().run()
输出
正如你所看到的,圆圈在整个应用程序窗口区域的随机位置绘制。
现在我们将应用 StencilView,并将绘图区域限制在主窗口中心 400×300 像素的区域内。
创建 StencilView 对象,并向其中添加一个 Widget 对象。绘图循环保持不变。
class circlesapp(App):
def build(self):
st = StencilView(
size_hint=(None, None), size=(400, 300),
pos_hint={'center_x':.5, 'center_y':.5}
)
w=widget()
st.add_widget(w)
return st
如果我们现在运行应用程序,我们应该看到随机圆圈出现在模板区域内,对于模板区域之外的所有位置,绘图指令都受到限制。
广告