在 tkinter 中移动整个画布及其内容的位置不仅仅是滚动

问题描述

我在 python 3.9 中使用 tkinter 8.6。我想在窗口中创建一些画布,并使它们能够通过单击和拖动来移动。通过阅读其他帖子,我在下面编写了代码(这是一个可重现的简单示例):

from tkinter import *

class MyClass:

    def __init__(self,master=None):
        self.master = master

        self.canvas = Canvas(master,bg="green",width=380,height=100)

        self.rectangle = self.canvas.create_rectangle(
            120,40,140,60,fill="black")

        self.canvas.bind("<ButtonPress-1>",self.scroll_start)
        self.canvas.bind("<B1-Motion>",self.scroll_move)
        self.canvas.place(x=100,y=100)

    def scroll_start(self,event):
        self.canvas.scan_mark(event.x,event.y)

    def scroll_move(self,event):
        self.canvas.scan_dragto(event.x,event.y,gain=1)


if __name__ == "__main__":
    master = Tk()
    master.geometry("800x300")
    my_class = MyClass(master)

    mainloop()

enter image description here

但它只是使画布中的内容可滚动(移动)而不是整个画布(我希望用户能够通过单击和拖动来更改绿色矩形及其内容(此处为黑色矩形)的位置。
如何将整个画布及其对象一起移动?

我也试过这个代码

from tkinter import *

class MyClass:

    def __init__(self,fill="black")

        self.canvas.bind("<B1-Motion>",self.move)
        self.canvas.place(x=100,y=100)

    def move(self,event):
        self.canvas.place(x=event.x,y=event.y)


if __name__ == "__main__":
    master = Tk()
    master.geometry("800x300")
    my_class = MyClass(master)
    print(TkVersion)
    mainloop()

它使移动画布成为可能,但运动非常生涩和不稳定。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)