gpt4 book ai didi

python - Kivy:分散内部分散

转载 作者:行者123 更新时间:2023-12-01 09:25:42 25 4
gpt4 key购买 nike

问题:如何将一个 Scatter 放入另一个 Scatter 中?

我对 kivy 的坐标有一些疑问。原则上我希望在 Scatter 中有一个 Scatter。它们应该是可拖动的(移动第一个散点会移动所有内容,移动第二个散点会在第一个散点内移动第二个散点)。

具体设置

  1. 我想要一张可缩放且可移动的 basemap (分散 1)。当我们变换这张 map 时,绘制在这张 map “顶部”的所有内容也应该被变换(它保持其在 map 上的位置)。

  2. 然后我想在 map 顶部绘制一个可以自行移动的网格(分散2)。

  3. 然后我在散点 2 上添加一些点。

  4. 重新缩放窗口时必须保留相对位置。

预期行为

当我抓取分散 2 时,它可以四处移动,并且点 (3.) 相对于分散 2 保持不变。当我抓取分散 1 时,它应该移动所有内容。散点 2,点将停留在 map 上的位置(散点 1)。

基本示例代码

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder

kv = """
<MyRoot>:
orientation: 'vertical'
ActionBar:
ActionView:
ActionPrevious:
title: ''
with_previous: True
ActionOverflow:
ActionButton:
text: 'Preferences'
on_press: app.open_settings()
Scatter:
canvas:
Color:
rgb: .2, .2, .3
Rectangle:
pos: self.pos
size: self.size
Scatter:

canvas:
Color:
rgb: .8, .2, .3
Rectangle:
pos: self.pos
size: self.size
Widget:
pos: 200, 200
canvas:
Color:
rgb: .1, .7, .3
Ellipse:
pos: 30,50
size: 10, 10
"""
Builder.load_string(kv)


class MyApp(App):
def build(self):
return MyRoot()


class MyRoot(BoxLayout):
pass


if __name__ == '__main__':
MyApp().run()

这里还有一张正在发生的事情的图片。我希望将绿点固定在红色散点上,并将红色散点固定在紫色点内: enter image description here

方法

我想我必须在每一步中转换坐标并覆盖函数on_touch_...,也许使用self.parent.to_parent(*touch.pos)但不幸的是我无法将所有内容修补在一起。

感谢您的帮助!

最佳答案

Rectangle:
size: self.size

这是一个相对布局,因此我们需要:pos: 0,0 而不是 pos: self.pos

关于python - Kivy:分散内部分散,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50415281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com