python - Kivy,鼠标周围不透明,显示图片
问题描述
我想制作一个谜题,其中有人必须遵循迷宫并收集必须稍后输入的字母作为答案。(程序不收集,只是记住通过了哪些字母,然后在退出迷宫时输入。)
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.gridlayout import GridLayout
from kivy.config import Config
Config.set('graphics', 'width', '806')
Config.set('graphics', 'height', '706')
class Touch(Widget):
def __init__(self, **kwargs):
super(Touch, self).__init__(**kwargs)
def on_touch_down(self, touch):
pass
def on_touch_down(self, touch):
pass
def on_touch_down(self, touch):
pass
class MyGrid(GridLayout):
pass
class DrawingWindow(App):
def build(self):
return MyGrid()
if __name__ == "__main__":
DrawingWindow().run()
<MyGrid>:
GridLayout:
cols:1
size:1000,706
canvas:
Rectangle:
size: 808,706
source: 'Puzzle.png'
我已经找到了如何在鼠标所在的地方画一个圆圈(没有添加到代码中,因为我认为可能会使用不同的方法),但是如何使某个半径周围的所有东西都变成黑色,这样它只会显示一个小在这个半径内圈。也许在半径内使用不透明度是一种解决方案。如果有人可以将我推向正确的方向,那将非常有帮助。
它不必保持公开,而不是实际上。希望这也让它变得更容易一些。
我希望我已经清楚地说明了问题所在。提前感谢您的时间和精力。
解决方案
您可以使用Stencil Instructions来完成此操作。这是一个简单的例子:
from kivy.app import App
from kivy.core.window import Window
from kivy.lang import Builder
from kivy.properties import NumericProperty, ListProperty
from kivy.uix.widget import Widget
kv = '''
RelativeLayout:
ImageWithHole:
id: hole
canvas:
StencilPush
Ellipse: # draw the hole
pos: self.hole_pos[0] - self.radius, self.hole_pos[1] - self.radius
size: self.radius*2, self.radius*2
StencilUse
Color:
rgba: 1,1,1,1
Rectangle:
source: 'Puzzle.png' # draw the maze
pos: 0,0
size: self.size
StencilUnUse
Ellipse: # erase the hole (must be identical to original draw above)
pos: self.hole_pos[0] - self.radius, self.hole_pos[1] - self.radius
size: self.radius*2, self.radius*2
StencilPop
'''
class ImageWithHole(Widget):
radius = NumericProperty(50)
hole_pos = ListProperty([400, 300])
class TestApp(App):
def build(self):
Window.bind(mouse_pos=self.on_motion)
return Builder.load_string(kv)
def on_motion(self, src, mouse_pos):
hole = self.root.ids.hole
hole.hole_pos = mouse_pos
TestApp().run()
推荐阅读
- actionscript-3 - 如何根据动态文本的宽度创建动态下三分之一 i AS3
- playwright - Playwright 测试运行器:将测试限制为仅一个浏览器,其配置文件包含许多项目
- css - 打字机效果全幅
- jenkins - Jenkins 错误:在构建时找不到名为 toolbelt 的工具
- api - 是否有任何选项可以通过 PushBullet API 获取最后传入的短信?
- javascript - 如何从 JS 文件中的 groovy 控制器访问返回的对象
- selenium - XPATH 文本设置基于语言的动态值
- mysql - 在 Apache Superset SQL LAB 中计算同比增长时在查询中添加过滤器列
- python - 如何使用 Python 排序函数使用布尔比较函数对列表进行排序
- autocomplete - 当我按下分号和空格时,如何禁用自动完成弹出;