ich möchte ein Programm schreiben mit dem man auf Bilder Maße abgreifen kann. Dafür muss man eine Linie zeichnen und die bekannte Länge festlegen.
Das ganze soll mit tkinter realisiert werden. Mehr als die Hälfte meines Codes ist zusammengeklaut, daher die Mischung von Deutsch und Englisch.
Ich wollte damit anfangen das ich die Länge berechne zwsichen start x und y und ende x und y. Diese Werte werden können bei der Methode release ausgegeben werden.
1. Problem:
Füge ich einen Button hinzu mit der die Methode
Code: Alles auswählen
command=self.bekannteLaenge
Code: Alles auswählen
AttributeError: '_tkinter.tkapp' object has no attribute 'bekannteLaenge'
Code: Alles auswählen
def bekannteLaenge(self):
print(coordsAusgeben)
Code: Alles auswählen
{'x': 251, 'y': 219, 'x2': 349, 'y2': 295}
Ich würde es jetzt so versuchen:
1. release Methode mit return self.coords
2. Variabelcoords Ausgeben an Methodenaufruf coordsAusgeben = self.canvas.bind('<ButtonRelease-1>', release)
3. In der Methode bekannteLaenge(self) auf die Variable coordsAuslesen zugreifen.
Aber dafür muss erstmal das Programm laufen.
Hier ist der Quellcode:
Code: Alles auswählen
import tkinter as tk
class Programm(tk.Tk):
def __init__(self):
super().__init__()
self.title("Leeres Programm")
self.cbutton = tk.Button(self, text="Laenge festlegen", command=self.bekannteLaenge)
self.cbutton.pack()
self.canvas = tk.Canvas(self, bg="white", width=600, height=400)
self.canvas.pack()
self.coords = {"x":0,"y":0,"x2":0,"y2":0}
self.final=[]
self.lines = []
def bekannteLaenge(self):
print(coordsAusgeben)
def click(e):
self.coords["x"] = e.x
self.coords["y"] = e.y
self.lines.append(self.canvas.create_line(self.coords["x"],self.coords["y"],self.coords["x"],self.coords["y"]))
def release(l):
lis=[]
lis.append(self.coords["x"]);lis.append(self.coords["y"]);lis.append(self.coords["x2"]);lis.append(self.coords["x2"])
self.final.append(lis)
print(self.coords)
return self.coords
def drag(e):
self.coords["x2"] = e.x
self.coords["y2"] = e.y
self.canvas.coords(self.lines[-1], self.coords["x"],self.coords["y"],self.coords["x2"],self.coords["y2"])
self.canvas.bind("<ButtonPress-1>", click)
self.canvas.bind("<B1-Motion>", drag)
coordsAusgeben = self.canvas.bind('<ButtonRelease-1>', release)
def main():
root = Programm()
root.mainloop()
if __name__ == "__main__":
main()
Kai