代码之家  ›  专栏  ›  技术社区  ›  user8884453

Python tkinter在画布上创建对象

  •  0
  • user8884453  · 技术社区  · 8 年前

    我是python新手,正在尝试使用tkinter为模拟器设计GUI。

    我的问题是,我需要通过单击按钮在画布上创建一个对象图像,并且必须能够在画布区域周围拖动。

    但是,目前我只能在画布上创建图像,无法拖动

    这是我的部分代码:

    from tkinter import *
    def show_train():
         canvas.create_image(30,30, image=image1)
    root = Tk()
    canvas = Canvas(iframe5, height=600, width=520, bg="white")
    image1 = PhotoImage(file='train.png')
    b1=Button(frame,justify=LEFT)
    b1.config(image=image1,width="80",height="80", command=show_train)
    b1.pack(side=LEFT)
    b1.place(x=0, y=12)
    canvas.pack(side=RIGHT, expand=True)
    root.mainloop()
    

    任何善良的灵魂? 提前感谢

    1 回复  |  直到 8 年前
        1
  •  1
  •   user8884453 user8884453    8 年前

    解决我自己的问题,这段代码暂时可以使用。

    class CreateCanvasObject(object):
        def __init__(self, canvas, image_name, xpos, ypos):
            self.canvas = canvas
            self.image_name = image_name
            self.xpos, self.ypos = xpos, ypos
            self.tk_image = tk.PhotoImage(file="{}{}".format(IMAGE_PATH, image_name))
            self.image_obj= canvas.create_image(xpos, ypos, image=self.tk_image)
            canvas.tag_bind(self.image_obj, '<Button1-Motion>', self.move)
            canvas.tag_bind(self.image_obj, '<ButtonRelease-1>', self.release)
            self.move_flag = False
    
        def move(self, event):
            if self.move_flag:
                new_xpos, new_ypos = event.x, event.y
                self.canvas.move(self.image_obj, new_xpos-self.mouse_xpos ,new_ypos-self.mouse_ypos)
                self.mouse_xpos = new_xpos
                self.mouse_ypos = new_ypos
            else:
                self.move_flag = True
                self.canvas.tag_raise(self.image_obj)
                self.mouse_xpos = event.x
                self.mouse_ypos = event.y
    
        def release(self, event):
            self.move_flag = False