使用python拖放;删除选定的图像段

使用python拖放;删除选定的图像段,python,numpy,image-processing,matplotlib,tkinter,Python,Numpy,Image Processing,Matplotlib,Tkinter,我的要求是我需要将图像拖到所需的位置。 基于链接 下面是我尝试的代码快照。我没有收到任何错误,它是空白的。请让我知道前进的道路 将Tkinter作为tk导入 从Tkinter进口* 从PIL导入ImageTk,图像 类示例(tk.Frame): 定义初始化(自身,父级): tk.Frame.\uuuu init\uuuuu(自,父) #创建画布 self.canvas=tk.canvas(宽度=400,高度=400) self.canvas.pack(fill=“both”,expand=Tr

我的要求是我需要将图像拖到所需的位置。 基于链接 下面是我尝试的代码快照。我没有收到任何错误,它是空白的。请让我知道前进的道路

将Tkinter作为tk导入
从Tkinter进口*
从PIL导入ImageTk,图像
类示例(tk.Frame):
定义初始化(自身,父级):
tk.Frame.\uuuu init\uuuuu(自,父)
#创建画布
self.canvas=tk.canvas(宽度=400,高度=400)
self.canvas.pack(fill=“both”,expand=True)
#此数据用于跟踪
#正在拖动的项目
self._drag_data1={“x”:0,“y”:0,“item1”:None}
startframe=tk.Frame(根)
canvas=tk.canvas(起始帧,宽度=1280,高度=720)
startframe.pack()
canvas.pack()
one=tk.PhotoImage(文件=r'images/test1.gif)
root.one=one#防止图像垃圾被收集。
canvas.create_image((0,0),image=one,anchor='nw',tags=“img1”)
self.canvas.tag\u bind(“img1”,“”,self.on\u token\u press1)
self.canvas.tag\u bind(“img1”,self.on\u token\u release1)
self.canvas.tag\u bind(“token”,“”,self.on\u token\u motion1)
令牌上的def按1(自身、事件):
打印(“sss”)
#记录项目及其位置
self._drag_data1[“item1”]=self.canvas.find_closest(event.x,event.y)[0]
self._drag_data1[“x”]=event.x
self._drag_data1[“y”]=event.y
令牌释放1上的def(自身,事件):
#重置拖动信息
self.\u drag\u data1[“item1”]=无
自拖动数据1[“x”]=0
自我。拖动数据1[“y”]=0
令牌上的def动作1(自身、事件):
''处理对象的拖动''
#计算鼠标移动了多少
delta_x=event.x-self._拖动_数据1[“x”]
delta_y=event.y-self.\u拖动数据1[“y”]
#将对象移动适当的量
self.canvas.move(self._drag_data1[“item1”]、delta_x、delta_y)
#记录新位置
self._drag_data1[“x”]=event.x
self._drag_data1[“y”]=event.y
如果名称=“\uuuuu main\uuuuuuuu”:
root=tk.tk()
示例(root).pack(fill=“both”,expand=True)
root.mainloop()

如评论中所述:

缩进很重要

在示例类及其启动方法中,整个代码块未对齐:

startframe = tk.Frame(root)
canvas = tk.Canvas(startframe,width=1280,height=720)
startframe.pack()
canvas.pack()
one = tk.PhotoImage(file=r'images/test1.gif')
root.one = one  # to prevent the image garbage collected.
canvas.create_image((0,0), image=one, anchor='nw',tags="img1")

self.canvas.tag_bind("img1", "<1>", self.on_token_press1)
self.canvas.tag_bind("img1", "<1>", self.on_token_release1)
self.canvas.tag_bind("token", "<B1-Motion>", self.on_token_motion1)
startframe=tk.Frame(根)
canvas=tk.canvas(起始帧,宽度=1280,高度=720)
startframe.pack()
canvas.pack()
one=tk.PhotoImage(文件=r'images/test1.gif)
root.one=one#防止图像垃圾被收集。
canvas.create_image((0,0),image=one,anchor='nw',tags=“img1”)
self.canvas.tag\u bind(“img1”,“”,self.on\u token\u press1)
self.canvas.tag\u bind(“img1”,self.on\u token\u release1)
self.canvas.tag\u bind(“token”,“”,self.on\u token\u motion1)
如果我只需在整个块的缩进中添加一个
选项卡
,我就可以毫无问题地运行OP的代码

由于脚本需要将
GIF
文件放置在
images/test1.GIF
I下载并使用此GIF:


tkinter似乎没有实际播放gif(OP没有要求播放),但它确实显示了gif

def\uuuu init\uuu
中的语句是否故意错位?这肯定会破坏密码。。或者这仅仅是您的问题中的一个复制/粘贴/标记错误的问题?顺便说一句,在您的代码段中出现了多个未对齐。请仔细检查这些是否是标记错误。。缩进在Python中很重要。由于更改了一些更新,因此类中没有定义代码
root
,因此它在第行中给出了一个错误:
startframe=tk.Frame(root)
NameError:name'root'未定义请参阅我的答案,它有效吗?谢谢,我如何将所选图像移动到另一个画布?@AshaDatla-Ah,那当然是你的问题。。我的错误。好吧,我不会费劲去修改你的代码,因为这会占用我太多的时间。然而,有两件事你应该真正意识到:(1)仔细阅读Python类和定义,因为你的代码在使用
self.
(2)时似乎有点冲突,请注意,你的代码的原始源代码已经超过5年了,而且已经过时了。有关移动图像的更简单的工作示例,请参见答案。看看你能不能从那里爬上去。。。
startframe = tk.Frame(root)
canvas = tk.Canvas(startframe,width=1280,height=720)
startframe.pack()
canvas.pack()
one = tk.PhotoImage(file=r'images/test1.gif')
root.one = one  # to prevent the image garbage collected.
canvas.create_image((0,0), image=one, anchor='nw',tags="img1")

self.canvas.tag_bind("img1", "<1>", self.on_token_press1)
self.canvas.tag_bind("img1", "<1>", self.on_token_release1)
self.canvas.tag_bind("token", "<B1-Motion>", self.on_token_motion1)