title: Tkinter get mouse coordinates on click and use them as variables
body: <p>I am completely new to Python. Therefore don't get too mad at me, because I am sure that there are basic things that I am missing. Here is my problem:</p>
  
  <p>I am trying to extract mouse-click coordinates from an image and use those coordinates as variables.</p>
  
  <p>The code allows to import and image, from which I want to extract the coordinates. Some prompts ask the user about size and extent of the diagram, after which I would like to set up a coordinate grid by clicking the origin, and the end point on the x- and y-axes respectively. The idea is to use these 3 sets of coordinates and transform them into Pressure and Temperature coordinates through some transformation functions (see code).</p>
  
  <pre><code># Determine the origin by clicking
  # Probably with classes??
  class Origin:
      def getorigin(eventorigin):
            eventorigin.x0 = eventorigin.x
            eventorigin.y0 = eventorigin.y
      #mouseclick event
      w.bind("&lt;Button 1&gt;",getorigin)
  # What do I do here??
  x0 = ...
  y0 = ...
  </code></pre>
  
  <p>I don't really know how to assign the coordinates that I get through clicking, to a new variable that I can use later in the code.</p>
  
  <p>I can print the coordinates, but since they are a function, they are local and are not usable outside of the function (as far as I could understand). So, and approach using classes might be better, but I have no idea how to do that.</p>
  
  <p>Any help is appreciated.</p>
  
  <p>FULL CODE (ADAPTED):</p>
  
  <pre><code>from tkinter import *
  from tkinter.filedialog import askopenfilename
  from PIL import Image, ImageTk
  import tkinter.simpledialog
  
  root = Tk()
  
  #setting up a tkinter canvas
  w = Canvas(root, width=1000, height=1000)
  w.pack()
  
  #adding the image
  File = askopenfilename(parent=root, initialdir="./",title='Select an image')
  original = Image.open(File)
  original = original.resize((1000,1000)) #resize image
  img = ImageTk.PhotoImage(original)
  w.create_image(0, 0, image=img, anchor="nw")
  
  #ask for pressure and temperature extent
  xmt = tkinter.simpledialog.askfloat("Temperature", "degrees in x-axis")
  ymp = tkinter.simpledialog.askfloat("Pressure", "bars in y-axis")
  
  #ask for real PT values at origin
  xc = tkinter.simpledialog.askfloat("Temperature", "Temperature at origin")
  yc = tkinter.simpledialog.askfloat("Pressure", "Pressure at origin")
  
  #instruction on 3 point selection to define grid
  tkinter.messagebox.showinfo("Instructions", "Click: \n" 
                                              "1) Origin \n"
                                              "2) Temperature end \n"
                                              "3) Pressure end")
  
  # From here on I have no idea how to get it to work...
  
  # Determine the origin by clicking
  def getorigin(eventorigin):
      global x0,y0
      x0 = eventorigin.x
      y0 = eventorigin.y
      print(x0,y0)
  #mouseclick event
  w.bind("&lt;Button 1&gt;",getorigin)
  
  # Determine the extent of the figure in the x direction (Temperature)
  def getextentx(eventextentx):
      global xe
      xe = eventextentx.x
      print(xe)
  #mouseclick event
  w.bind("&lt;Button 1&gt;",getextentx)
  
  # Determine the extent of the figure in the y direction (Pressure)
  def getextenty(eventextenty):
      global ye
      ye = eventextenty.y
      print(ye)
  #mouseclick event
  w.bind("&lt;Button 1&gt;",getextenty)
  
  #message to confirm that the grid is set up
  tkinter.messagebox.showinfo("Grid", "Grid is set. You can start picking coordinates.")
  
  #Coordinate transformation into Pressure-Temperature space
  def printcoords(event):
      xmpx = xe-x0
      xm = xmt/xmpx
      ympx = ye-y0
      ym = -ymp/ympx
  
      #coordinate transformation
      newx = (event.x-x0)*(xm)+xc
      newy = (event.y-y0)*(ym)+yc
  
      #outputting x and y coords to console
      print (newx,newy)
  #mouseclick event
  w.bind("&lt;Button 1&gt;",printcoords)
  
  root.mainloop()
  </code></pre>