0

好的,所以首先我将 Python 3.7 与 tkinter 一起使用。

我有一个画布,我可以使用鼠标事件拖动一个标签。我的下一步是能够拖动可以放置更多小部件的东西。所以想象一个盒子,上面有一个文本框和一个图像,也许还有一个组合框。然后可以拖动该框。

我想也许我需要的是画布上的框架小部件,然后我可以按照与标签相同的方式进行设置。但这似乎是分崩离析的地方-显然我做错了什么。

这是我一直在玩的代码,但无济于事:

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

def ClickedCallback(event):
    print(f'Clicked: coords: {event.x}, {event.y}')

def ReleaseCallback(event):
    print(f'Released: coords: {event.x}, {event.y}')

def MotionCallback(event):
    print(f'Motion: coords: {event.x}, {event.y}')
    canvas.coords(frame_id, event.x, event.y)

canvas = tk.Canvas(root, width=1000, height=600, bg='blue')
canvas.bind("<B1-Motion>", MotionCallback)
canvas.pack()

frame = tk.Frame(canvas, bg='green')
frame.pack()

l2 = tk.Label(frame, bg='red')
l2.bind("<Button-1>", ClickedCallback)
l2.pack()
l2['text'] = "Test"


frame_id = canvas.create_window((300,300), window=frame)
label_id = canvas.create_window((100, 100), window=l2)

root.mainloop()

我在这里的想法是,我将框架附加到画布上,然后将标签附加到框架上,这样,如果我移动框架,其中的标签也会移动。

上面的方法不起作用,它告诉我以下内容:

_create *(args + self._options(cnf, kw)))) _tkinter 中的文件“C:\Users\JohnSmith\AppData\Local\Programs\Python\Python37-32\lib\tkinter__init__.py”,第 2480 行。 TclError: can't use .!canvas.!frame.!label in a window item in this canvas

我可能会以完全错误的方式解决这个问题。我已经四处寻找更多的东西,但如果有什么我做错了或者我应该这样做的既定方式,如果你能指出我正确的方向,我将不胜感激。

4

0 回答 0