Tkinter bekommen Maus-Koordinaten auf klicken Sie auf und verwenden Sie als Variablen

Ich bin komplett neu in Python. Also nicht zu Sauer auf mich, weil ich sicher bin, dass es grundlegende Dinge, die mir fehlen. Hier ist mein problem:

Ich versuche zu extrahieren Maus-Klick Koordinaten aus einem Bild und verwenden diese Koordinaten als Variablen.

Code ermöglicht das importieren und Bild, von denen ich möchte zum extrahieren der Koordinaten. Einige Aufforderungen, bitten Sie den Benutzer über Größe und Umfang des Diagramms, nach welcher, ich möchte gerne ein Koordinaten-Gitter, indem Sie auf den Ursprung und den Endpunkt auf der x - und y-Achsen. Die Idee ist, diese 3 Sätze von Koordinaten und transformieren Sie in Druck-und Temperatur-Koordinaten durch einige transformation von Funktionen (siehe 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("<Button 1>",getorigin)
# What do I do here??
x0 = ...
y0 = ...

Ich weiß wirklich nicht, wie das zuweisen der Koordinaten, die ich durch klicken, auf eine neue variable, die ich verwenden können, die später im code.

Kann ich drucken Sie die Koordinaten, aber da Sie eine Funktion, Sie sind lokal und werden nicht nutzbare außerhalb der Funktion (soweit ich das verstehen konnte). So, und den Ansatz mit Klassen könnte besser sein, aber ich habe keine Ahnung, wie das geht.

Jede Hilfe ist willkommen.

VOLLSTÄNDIGEN CODE (ANGEPASST):

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("<Button 1>",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("<Button 1>",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("<Button 1>",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("<Button 1>",printcoords)

root.mainloop()
InformationsquelleAutor Lele | 2017-02-27
Schreibe einen Kommentar