这是关于使用tkinter在Python 3.7(我认为)中在画布上移动标签。
在Google和此站点上都有很多答案,但是没有一个答案能回答我的问题,但是我无法想象我的代码会更简单。在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()
现在会导致直线错误。 “第2591行,正在移动 self.tk.call((self._w,'move')+ args) _tkinter.TclError:标记搜索表达式中的布尔运算符无效”
然后,我看到了一个示例,该示例显示了输入到方法中的对象名称是字符串,而不是对象本身。这样一行就变成了:
canvas.move('l2', 5, 0)
现在这不会导致错误。但这也无能为力。
我什至不知道在画布上移动是否是执行此操作的最佳方法。我只想在窗口内移动标签,这似乎是出现在搜索中的标签。
答案 0 :(得分:1)
要在Label
上放置小部件(即Canvas
),您必须使用
label_id = canvas.create_window(position, window=l2,...)
不是place()
/ grid()
/ pack()
然后您使用此label_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()