- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
当我注册一个多边形或只有一个组件的复合形状时,我可以使用该形状创建一个 turtle 光标,添加一个拖动事件处理程序,并将它拖到屏幕上。
但是当我用第二个组件注册一个复合形状时,我不能再拖动它了:
from turtle import Turtle, Screen, Shape
def simple_polygon(turtle):
turtle.begin_poly()
turtle.circle(50)
turtle.end_poly()
screen.register_shape("simple_polygon", turtle.get_poly())
turtle.reset()
def compound_single(turtle):
shape = Shape("compound")
turtle.begin_poly()
turtle.circle(50)
turtle.end_poly()
shape.addcomponent(turtle.get_poly(), "blue", "blue") # component #1
screen.register_shape("compound_single", shape)
turtle.reset()
def compound_double(turtle):
shape = Shape("compound")
turtle.begin_poly()
turtle.circle(50)
turtle.end_poly()
shape.addcomponent(turtle.get_poly(), "green", "green") # component #1
turtle.penup()
turtle.left(90)
turtle.forward(25)
turtle.right(90)
turtle.pendown()
turtle.begin_poly()
turtle.circle(25)
turtle.end_poly()
shape.addcomponent(turtle.get_poly(), "yellow", "yellow") # component #2
screen.register_shape("compound_double", shape)
turtle.reset()
def drag_handler(turtle, x, y):
turtle.ondrag(None) # disable ondrag event inside drag_handler
turtle.goto(x, y)
turtle.ondrag(lambda x, y, turtle=turtle: drag_handler(turtle, x, y))
screen = Screen()
magic_marker = Turtle()
simple_polygon(magic_marker)
compound_single(magic_marker)
compound_double(magic_marker)
magic_marker.hideturtle()
red = Turtle(shape="simple_polygon")
red.color("red")
red.penup()
red.goto(150, 150)
red.ondrag(lambda x, y: drag_handler(red, x, y))
blue = Turtle(shape="compound_single")
blue.penup()
blue.goto(-150, -150)
blue.ondrag(lambda x, y: drag_handler(blue, x, y))
mostly_green = Turtle(shape="compound_double")
mostly_green.penup()
mostly_green.goto(150, -150)
mostly_green.ondrag(lambda x, y: drag_handler(mostly_green, x, y))
screen.mainloop()
您会发现生成的三个形状中只有两个可以拖动。注释掉这一行:
shape.addcomponent(turtle.get_poly(), "yellow", "yellow") # component #2
第三个圆圈将全部为绿色并且可以拖动。
我在 turtle 文档中找不到关于具有多个组件的复合形状在拖动方面不是有效光标的任何提及。第二个组件完全在第一个组件之内、重叠还是在第一个组件之外都没有任何区别。
查看 turtle 代码,我看不出有什么区别,这使我相信这个问题出在 tkinter 基础上,而没有在 turtle 中正确记录。这个问题是 Unix 还是 OSX 特有的?
我错过了什么吗?为什么我不能拖动由多个组件构建的光标?
最佳答案
我最近也遇到了这个问题,很高兴找到你的问题,cdlane,以确认我不仅仅是想象的事情——Python 的 turtle 模块中实际上可能存在错误。
我在 Python bug tracker 中查找了这个问题,幸运的是有人已经确定了这个问题并且其他人已经提交了一个补丁: https://bugs.python.org/issue16428
虽然在撰写本文时该补丁尚未合并到 Python 中,但我尝试修改我安装的 Python 版本以合并该补丁,并且成功了。
如果您不希望对已安装的 Python 进行更改,您可以猴子修补 turtle 对象以将补丁直接合并到您的代码中,如下所示:
[请注意,为了提高性能,我稍微修改了您的代码,添加了 tracer(0) 和 update();然而,补丁在没有这些添加的情况下也能工作。]
from turtle import Turtle, Screen, Shape, tracer, update
#### Monkey patch Turtle object to allow compound shapes to be dragged. ####
####### Based on patch by Ingrid: https://bugs.python.org/issue16428 #######
def onclick(self, fun, btn=1, add=None):
if (self.turtle._type == 'compound'):
for i in self.turtle._item:
self.screen._onclick(i, fun, btn, add)
else:
self.screen._onclick(self.turtle._item, fun, btn, add)
self._update()
Turtle.onclick = onclick
def onrelease(self, fun, btn=1, add=None):
if (self.turtle._type == 'compound'):
for i in self.turtle._item:
self.screen._onrelease(i, fun, btn, add)
else:
self.screen._onrelease(self.turtle._item, fun, btn, add)
self._update()
Turtle.onrelease = onrelease
def ondrag(self, fun, btn=1, add=None):
if (self.turtle._type == 'compound'):
for i in self.turtle._item:
self.screen._ondrag(i, fun, btn, add)
else:
self.screen._ondrag(self.turtle._item, fun, btn, add)
Turtle.ondrag = ondrag
############################ End Monkey patch. #############################
def simple_polygon(turtle):
turtle.begin_poly()
turtle.circle(50)
turtle.end_poly()
screen.register_shape("simple_polygon", turtle.get_poly())
turtle.reset()
def compound_single(turtle):
shape = Shape("compound")
turtle.begin_poly()
turtle.circle(50)
turtle.end_poly()
shape.addcomponent(turtle.get_poly(), "blue", "blue") # component #1
screen.register_shape("compound_single", shape)
turtle.reset()
def compound_double(turtle):
shape = Shape("compound")
turtle.begin_poly()
turtle.circle(50)
turtle.end_poly()
shape.addcomponent(turtle.get_poly(), "green", "green") # component #1
turtle.penup()
turtle.left(90)
turtle.forward(25)
turtle.right(90)
turtle.pendown()
turtle.begin_poly()
turtle.circle(25)
turtle.end_poly()
shape.addcomponent(turtle.get_poly(), "yellow", "yellow") # component #2
screen.register_shape("compound_double", shape)
turtle.reset()
def drag_handler(turtle, x, y):
turtle.ondrag(None) # disable ondrag event inside drag_handler
turtle.goto(x, y)
update()
turtle.ondrag(lambda x, y, turtle=turtle: drag_handler(turtle, x, y))
screen = Screen()
tracer(0)
magic_marker = Turtle()
simple_polygon(magic_marker)
compound_single(magic_marker)
compound_double(magic_marker)
magic_marker.hideturtle()
red = Turtle(shape="simple_polygon")
red.color("red")
red.penup()
red.goto(150, 150)
red.ondrag(lambda x, y: drag_handler(red, x, y))
blue = Turtle(shape="compound_single")
blue.penup()
blue.goto(-150, -150)
blue.ondrag(lambda x, y: drag_handler(blue, x, y))
mostly_green = Turtle(shape="compound_double")
mostly_green.penup()
mostly_green.goto(150, -150)
mostly_green.ondrag(lambda x, y: drag_handler(mostly_green, x, y))
update()
screen.mainloop()
关于Python turtle ondrag 事件与复合形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43176331/
我远不是 html/javascript 专家,我对这个问题很着迷。在网上没有找到与此相关的任何信息,我尝试了多种方法但没有成功。 基本上,我使用拖动功能来实现某些目标。我真的不需要拖放,我只对拖放感
我正在使用 JQuery Tabs,我想在拖动它时更改指针。 有人知道在哪里可以找到如何做到这一点吗? 最佳答案 CSS .ui-tabs ul.ui-tabs-nav li.ui-state-def
我正在编写一个应用程序,用户可以在其中购买建筑物(图像按钮)并使用拖放 API 自由移动它们。我想做的是保存建筑物的坐标,以便可以将它们加载回原来的位置。我目前正在尝试使用共享首选项,但当尝试在 on
我正在创建一个应用程序,用户可以在其中购买建筑物,这些建筑物是也实现拖放 API 的图像按钮。目前我遇到一个问题,假设我已经购买了 2 栋建筑:colonyHutOne 和 colonyHutTwo。
I want a mouse drager event when i drag and move the mouse accordingly with the velocity of mouse mo
我正在开发一个 Android 应用程序,用户可以在其中购买建筑物,这些建筑物是实现拖放 API 的图像按钮。我的问题是,当用户购买两座建筑物时,比如 colonyHutOne 和 colonyHut
我有一个拖放应用程序,它使用 JQuery UI onDrag 和 onDrop。该应用程序是一个带有选项卡的房间预订系统。我已经使 drop-work 完美运行,但有一个功能是我真正想要的(如果可能
该对象如下所示: 这就是我访问它的方式:console.log(this)(this输出Directive对象)。 如何调用该对象的 ondrag 事件? 我尝试过这个: this.el('ondra
当我注册一个多边形或只有一个组件的复合形状时,我可以使用该形状创建一个 turtle 光标,添加一个拖动事件处理程序,并将它拖到屏幕上。 但是当我用第二个组件注册一个复合形状时,我不能再拖动它了: f
我一直在尝试使用 ondrag()和 div 上的一些其他功能在 HTML 上动态呈现页面。 这些事件似乎都没有触发,我也没有收到任何错误。我也找不到很多有用的文档。我是不是理解错了,您可以使用这些事
我注意到自 iOS 13.4 以来可用的 SwiftUI 中的拖放功能存在问题。使用 .onDrag 和 .onDrop 修饰符的拖放操作在模拟器中运行良好,但在真实设备(iPhone 和 iPad)
我遇到了以下问题:我想为 LinearLayout 实现 View.DragOnListener。当我长按屏幕时,OnDrag 方法接收到 DragEvent.ACTION_DRAG_STARTED,
例如: https://github.com/lbj96347/easypost/blob/master/test.html (p.s:你应该有 jquery 和页面的 css 文件。:-)) 像这个
尝试让下面的代码工作: public void OnBeginDrag(PointerEventData eventData) { if (item.ID != -1) {
我一直想知道是否有任何方法可以自定义使用 onDrag 时被拖动的 view 的 preview image? 如您所见,默认情况下,预览图像 是略大的不透明度图像。 根据我的发现,preview i
我一直想知道是否有任何方法可以自定义 preview image的view使用 onDrag 时被拖动? 如您所见,preview image默认情况下, View 的不透明度图像稍大。 根据我的发现
我用JS编写了一个函数,需要向其中传递一个变量。在这种情况下,实际的功能并不重要,但我不知道如何让它正确地传递变量。 HTML 看起来像这样 - 然后,我们将该函数描述为.. fu
在React js中,每个拖动事件都有一个带有“capture”前缀的相应事件onDragEnter 与 onDragEnterCapture、onDragLeave 与 onDragLeaveCap
我有一个小网站,我想在其中混淆一些文本,以保护不小心不及时阅读它的用户。 很像 imdb 上的关键词,你必须滚动才能显示它们。 我认为如果文本被标记,这将是一种很好的交互式方式来显示文本。 例子: H
这是我的便签本 http://jsbin.com/aledig/1/edit绘制时光标由指针改变,如何防止? 最佳答案 我在这个便签本中找不到任何问题。光标在 IE 和 FireFox 中始终是指针。
我是一名优秀的程序员,十分优秀!