微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从此程序中获取绘制矩形的起点和终点 (x,y)

如何解决如何从此程序中获取绘制矩形的起点和终点 (x,y)

我如何从这个程序中获取绘制矩形的起点和终点 (x,y)

在带有滚动条的 Tkinter.Canvas 内的 Tkinter.Frame 中显示图像,单击鼠标开始绘制矩形,释放时停止绘制

import PIL.Image
import PIL.ImageTk
from tkinter import *


class ExampleApp(Frame):
    def __init__(self,master):
        Frame.__init__(self,master=None)
    
        self.x = self.y = 0
        self.canvas = Canvas(self,cursor="cross",width=800,height=800)

        self.sbarv = Scrollbar(self,orient=VERTICAL)
        self.sbarh = Scrollbar(self,orient=HORIZONTAL)
        self.sbarv.config(command=self.canvas.yview)
        self.sbarh.config(command=self.canvas.xview)

        self.canvas.config(yscrollcommand=self.sbarv.set)
        self.canvas.config(xscrollcommand=self.sbarh.set)

        self.canvas.grid(row=0,column=0,sticky=N+S+E+W)
        self.sbarv.grid(row=0,column=1,stick=N+S)
        self.sbarh.grid(row=1,sticky=E+W)

        self.canvas.bind("<ButtonPress-1>",self.on_button_press)
        self.canvas.bind("<B1-Motion>",self.on_move_press)
        self.canvas.bind("<ButtonRelease-1>",self.on_button_release)

        self.rect = None

        self.start_x = None
        self.start_y = None

        self.im = PIL.Image.open("Scannen0019.jpg")
        self.wazil,self.lard = self.im.size
        self.canvas.config(scrollregion=(0,self.wazil,self.lard))
        self.tk_im = PIL.ImageTk.PhotoImage(self.im)
        self.canvas.create_image(0,anchor="nw",image=self.tk_im)

检查鼠标按钮是否被按下 如果按下开始绘制矩形到当前鼠标位置

def on_button_press(self,event):
        # save mouse drag start position
        self.start_x = self.canvas.canvasx(event.x)
        self.start_y = self.canvas.canvasy(event.y)

        # create rectangle if not yet exist
        if not self.rect:
            self.rect = self.canvas.create_rectangle(
                self.x,self.y,1,outline='red')

如果鼠标在区域外,则通过增加 xview 和 yview 开始滚动图像

    def on_move_press(self,event):
        curX = self.canvas.canvasx(event.x)
        curY = self.canvas.canvasy(event.y)

        w,h = self.canvas.winfo_width(),self.canvas.winfo_height()
        if event.x > 0.9*w:
            self.canvas.xview_scroll(1,'units')
        elif event.x < 0.1*w:
            self.canvas.xview_scroll(-1,'units')
        if event.y > 0.9*h:
            self.canvas.yview_scroll(1,'units')
        elif event.y < 0.1*h:
            self.canvas.yview_scroll(-1,'units')

        # expand rectangle as you drag the mouse
        self.canvas.coords(self.rect,self.start_x,self.start_y,curX,curY)

    def on_button_release(self,event):
        pass


if __name__ == "__main__":
    root = Tk()
    app = ExampleApp(root)
    app.pack()
    root.mainloop()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。