此代码 sn-p 是一种变通方法。它在画布 TKinter 中打开图像。
def __init__(self, parent):
self.parent = parent
self.create_frame()
def create_frame(self):
global image
cv_frame = Frame(self.parent)
cv_frame.pack()
imagepath = load_image()
image = Image.open(imagepath)
image = image.resize((1072, 650), Image.ANTIALIAS)
tkpi = ImageTk.PhotoImage(image)
canvas = Canvas(cv_frame, width=tkpi.width(), height=tkpi.height())
canvas.pack(side="top", fill="both", expand=True)
canvas.create_image(0, 0, anchor="nw", image=tkpi)
canvas.bind("<Button-1>", self.pressdown) ##binding for left button when its pressed
canvas.bind("<ButtonRelease-1>", self.pressup) ##binding for left button when its released
canvas.bind("<Double-Button-3>", self.reset) ##binding for right button double click will reset the drawn lines
canvas.image = tkpi
canvas.pack()
frame = Frame(cv_frame)
frame.pack()
crop = Button(frame, text="Crop", width=6, command=self.crop)
crop.pack(side=LEFT)
save = Button(frame, text="Save", width=6, command=self.save)
save.pack(side=LEFT)
def pressdown(self, event): ##event handler for left button when button is pressed
coords.append(event.x)
coords.append(event.y)
allpoints.append((event.x, event.y))
def pressup(self, event): ##event handler for left button when released
cord.append(event.x)
cord.append(event.y)
allpoints.append((event.x, event.y))
event.widget.create_line(coords[0], coords[1], cord[0], cord[1], fill="green", width=4, dash=(4, 4), tag="line")