Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中在画布上移动小部件_Python_Canvas_Tkinter - Fatal编程技术网

在Python中在画布上移动小部件

在Python中在画布上移动小部件,python,canvas,tkinter,Python,Canvas,Tkinter,这是关于使用tkinter在Python3.7(我想)中移动画布上的标签 在谷歌和这个网站上有很多答案,但没有一个能回答我的问题,但我无法想象我的代码会简单得多。谈到Python,我并没有太多的经验,显然我做了一些根本错误的事情 我想做的是:通过点击鼠标将标签移动到画布上指定的位置 我们到了: root = tk.Tk() root.geometry("800x600") def ClickedCallback(event): #print(f'Event: {event}, l2:

这是关于使用tkinter在Python3.7(我想)中移动画布上的标签

在谷歌和这个网站上有很多答案,但没有一个能回答我的问题,但我无法想象我的代码会简单得多。谈到Python,我并没有太多的经验,显然我做了一些根本错误的事情

我想做的是:通过点击鼠标将标签移动到画布上指定的位置

我们到了:

root = tk.Tk()
root.geometry("800x600")

def ClickedCallback(event):
    #print(f'Event: {event}, l2: {l2}, tags: {canvas.gettags()}')
    canvas.move(l2, 5, 0)

canvas = tk.Canvas(root, width=1000, height=600, bg='blue')
canvas.bind("<Button-1>", ClickedCallback)
canvas.place(relwidth=0.9, relheight=0.8, relx = 0.05, rely = 0.05)

l2 = tk.Label(canvas, bg='red')
l2.bind("<Button-1>", ClickedCallback)
l2.place(relx=0.2, rely=0.2)
l2['text'] = "Test"

root.mainloop()
现在这不会导致错误。但它也不起任何作用

我甚至不知道在画布上移动是否是最好的方法。我只想在窗口内移动一个标签,这似乎就是搜索中出现的标签。

要在
画布上放置小部件(即
label
),您必须使用

label_id = canvas.create_window(position, window=l2,...)
不是
place()
/
grid()
/
pack()

然后使用此
标签\u id
移动它


简单示例-
Label
在您单击
Canvas

import tkinter as tk

# --- functions ---

def clicked_callback(event):
    #canvas.move(label_id, 5, 0)
    canvas.coords(label_id, event.x, event.y)

# --- main ---

root = tk.Tk()
root.geometry("800x600")

canvas = tk.Canvas(root, width=1000, height=600, bg='blue')
canvas.bind("<Button-1>", clicked_callback)
canvas.place(relwidth=0.9, relheight=0.8, relx=0.05, rely=0.05)

l2 = tk.Label(canvas, text="Test", bg='red')
#l2.bind("<Button-1>", clicked_callback)
label_id = canvas.create_window((100, 100), window=l2)

root.mainloop()
将tkinter作为tk导入
#---功能---
def已单击\u回调(事件):
#canvas.move(标签号5,0)
canvas.coords(label_id,event.x,event.y)
#---梅因---
root=tk.tk()
根几何(“800x600”)
canvas=tk.canvas(根,宽度=1000,高度=600,bg='blue')
canvas.bind(“,单击了\u回调)
canvas.place(relwidth=0.9,relheight=0.8,relx=0.05,relen=0.05)
l2=tk.Label(canvas,text=“Test”,bg='red')
#l2.bind(“,单击了\u回调)
label\u id=canvas.create\u window((100100),window=l2)
root.mainloop()

始终将完整的错误消息(从单词“Traceback”开始)作为文本(而不是屏幕截图)进行讨论(而不是评论)。还有其他有用的信息。
import tkinter as tk

# --- functions ---

def clicked_callback(event):
    #canvas.move(label_id, 5, 0)
    canvas.coords(label_id, event.x, event.y)

# --- main ---

root = tk.Tk()
root.geometry("800x600")

canvas = tk.Canvas(root, width=1000, height=600, bg='blue')
canvas.bind("<Button-1>", clicked_callback)
canvas.place(relwidth=0.9, relheight=0.8, relx=0.05, rely=0.05)

l2 = tk.Label(canvas, text="Test", bg='red')
#l2.bind("<Button-1>", clicked_callback)
label_id = canvas.create_window((100, 100), window=l2)

root.mainloop()