有没有一种方法可以使用 Python 直观地显示我单击的位置。

目前我的程序将打开一个图像,使用该图像你可以点击它的任何地方,它会返回你点击位置的像素坐标。从这些坐标中,您可以输入一些文本,它会向您显示编辑后的图像。然而,我想知道是否有一种方法可以在视觉上帮助用户向他们显示他们点击的位置。这是我当前用于打开图像并单击它以返回坐标的代码。我正在使用 tkinter,我知道我应该从 tkinter import * 中退出,但现在为时已晚:/。


    ### Function to open files ###

img_window = tkinter.PanedWindow(top, orient='vertical')

def file_opener():


    global actual_img

    global original_img


    top.filename = filedialog.askopenfilename(initialdir="*/Images/", title ="Select an Image", filetypes=((".png", "*.png"),(".jpg", "*.jpg")))


    original_img = Image.open(top.filename)


    #################### CLICK LOCATION OF WHERE YOU WANT TO ADD TEXT ####################


    event2canvas = lambda e, c: (c.canvasx(e.x), c.canvasy(e.y))


    imgApp = tkinter.Toplevel()


    # creating an img var of my original image

    img = ImageTk.PhotoImage(original_img)


    #setting up a tkinter canvas with scrollbars

    frame = tkinter.Frame(imgApp, bd=2, relief=tkinter.SUNKEN)

    frame.grid_rowconfigure(0, weight=1)

    frame.grid_columnconfigure(0, weight=1)

    xscroll = tkinter.Scrollbar(frame, orient=tkinter.HORIZONTAL)

    xscroll.grid(row=1, column=0, sticky=tkinter.E+tkinter.W)

    yscroll = tkinter.Scrollbar(frame)

    yscroll.grid(row=0, column=1, sticky=tkinter.N+tkinter.S)

    canvas = tkinter.Canvas(frame, bd=0, xscrollcommand=xscroll.set, yscrollcommand=yscroll.set, width = img.width(), height = img.height())

    canvas.grid(row=0, column=0, sticky=tkinter.N+tkinter.S+tkinter.E+tkinter.W)

    xscroll.config(command=canvas.xview)

    yscroll.config(command=canvas.yview)

    frame.pack(fill=tkinter.BOTH, expand = 1)


    # adding the image to canvas


    canvas.create_image(0,0,image=img,anchor="nw")

    canvas.config(scrollregion=canvas.bbox(tkinter.ALL))


    #function to be called when mouse is clicked

    def returncoords(event):

        global cx, cy

        #outputting x and y coords to console

        cx, cy = event2canvas(event, canvas)

        return cx, cy


慕森卡
浏览 153回答 1
1回答

千巷猫影

这是我的解决方案:当图像被打开时,它会显示 tcross 光标,当用户单击时它会更改光标,直到用户释放。canvas.create_image(0,0,image=img,anchor="nw")&nbsp; &nbsp; canvas.config(cursor = "tcross")&nbsp; &nbsp; canvas.config(scrollregion=canvas.bbox(tkinter.ALL))&nbsp; &nbsp; # function to be called when mouse is clicked&nbsp; &nbsp; def returnCoords(event):&nbsp; &nbsp; &nbsp; &nbsp; global cx, cy&nbsp; &nbsp; &nbsp; &nbsp; # change the cursor when button is held / click so user knows they selected a coordinate&nbsp; &nbsp; &nbsp; &nbsp; canvas.config(cursor = "dotbox")&nbsp; &nbsp; &nbsp; &nbsp; cx, cy = event2canvas(event, canvas)&nbsp; &nbsp; &nbsp; &nbsp; return cx, cy&nbsp; &nbsp; def returnCursor(event):&nbsp; &nbsp; &nbsp; &nbsp; canvas.config(cursor = "arrow")&nbsp; &nbsp; &nbsp; &nbsp; time.sleep(.7)&nbsp; &nbsp; &nbsp; &nbsp; imgApp.destroy()&nbsp; &nbsp; # mouseclick event / release&nbsp; &nbsp; canvas.bind("<ButtonPress-1>", returnCoords)&nbsp; &nbsp; canvas.bind("<ButtonRelease-1>", returnCursor)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python