gpt4 book ai didi

python - Kivy-使对象在拖动时被复制

转载 作者:太空宇宙 更新时间:2023-11-03 15:58:35 26 4
gpt4 key购买 nike

UI

如上图所示,我想让我的苹果留在原地,复制的苹果成为可拖动的对象。哪种方式可能?

这是我的代码。

mn.py

from kivy.uix.widget import Widget
from kivy.uix.behaviors import DragBehavior
from kivy.app import App
from kivy.properties import StringProperty


class apple_0(DragBehavior,Widget):
def on_touch_move(self,touch):
return super(apple_0, self).on_touch_move(touch)

class apple_1(DragBehavior,Widget):
def on_touch_move(self,touch):
return super(apple_1, self).on_touch_move(touch)

class base_0(Widget):
def basepicture_0(self):
pass

class mn(Widget):
pass

class mnApp(App):
def build(self):
return mn()

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

mn.kv

<mn>:
canvas:
Color:
rgb: 1,1,1,1
Rectangle:
size: root.width,root.height
pos: 0,0

Label:
pos: 30, root.top- 70
text:
('[size=20][color=000000]'
'fnc_slide_0'
'[/color][/0ize]')
markup: True

base_0:
id: base_0_id
pos: root.width/7, root.height/3

apple_0:
id: apple_0_id
pos: root.width/1.7,root.height/1.6
auto_bring_to_front: True

apple_1:
id: apple_1_id
pos: root.width/1.5,root.height/1.6
auto_bring_to_front: True

<base_0>
size: 944, 502
canvas:
Rectangle:
pos: self.pos
size: self.size
source: 'base_0.png'

<apple_0>:
size: 56.25,56.25
drag_rectangle: self.x, self.y, self.width, self.height
drag_timeout: 10000000
drag_distance: 0
canvas:
Rectangle:
pos: self.pos
size: self.size
source: 'apple_0.png'

<apple_1>:
size: 28.125,56.25
drag_rectangle: self.x, self.y, self.width, self.height
drag_timeout: 10000000
drag_distance: 0
canvas:
Rectangle:
pos: self.pos
size: self.size
source: 'apple_1.png'

最佳答案

创建一个可点击并可以存储图像的新小部件。使用canvas如果你愿意的话,但我用 Image 做到了,那么你可以通过 source__init__ 。这样的小部件将具有一个函数,该函数将接受位置和您想要生成的小部件的类。

当点击生成器时,它会创建一个小部件的新实例(因此参数中的类)并将其位置设置为生成器的位置。由于顶部的小部件捕获了所有触摸,因此不再需要 on_release除非您移动小部件或单击未被苹果覆盖的位置(如果您的苹果图像是圆形的,则为边缘),否则将会触发。

仅编辑了以下部分:

.py

class Spawner(ButtonBehavior, Image):
def spawn(self, pos, widgetcls, *args):
widget_instance = widgetcls(pos=pos)
self.parent.add_widget(widget_instance)

.kv

#:import Factory kivy.factory.Factory
<mn>:
canvas:
Color:
rgb: 1,1,1,1
Rectangle:
size: root.width,root.height
pos: 0,0

Label:
pos: 30, root.top- 70
text:
('[size=20][color=000000]'
'fnc_slide_0'
'[/color][/0ize]')
markup: True

base_0:
id: base_0_id
pos: root.width/7, root.height/3

Spawner:
id: apple_0_id
pos: root.width/1.7,root.height/1.6
on_release: self.spawn(self.pos, Factory.apple_0)

Spawner:
id: apple_1_id
pos: root.width/1.5,root.height/1.6
on_release: self.spawn(self.pos, Factory.apple_1)

或者直接在kv中进行,与 self.parent.add_widget(Factory.<widget>(pos=self.pos)) ,但灵 active 较差。

关于python - Kivy-使对象在拖动时被复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40543250/

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