2017-07-24 12 views
0

Ich arbeite gerade an einer interaktiven GUI mit Tkinter, die mit einem BMP-Bild funktioniert. Im Wesentlichen möchte ich in der Lage sein, auf eine Schaltfläche zu klicken, die es dem Benutzer dann ermöglicht, drei beliebige Punkte auf dem Bild anzugeben, die dann eine am besten passende Ellipse erzeugen und den kleinsten Wert innerhalb der Ellipse zurückgeben.Tkinter GUI Image w/Button

Ich bin in der Lage, das BMP-Bild zu erzeugen, aber ich weiß nicht, wie man eine Taste mit dem Bild erzeugt. Wie würde ich das machen?

Nachdem die Schaltfläche geklickt wurde, würde sie eine Funktion ausführen, die den Mauszeiger zu einem Fadenkreuz ändert, dann drei beliebige Punkte auf dem Bild mit Klicks aufnehmen und sie in Variablen speichern, mit denen ich später arbeiten würde Produziere die Elipse. Ich möchte, dass die Klicks vielleicht einen roten Punkt ergeben, um seine Position anzuzeigen.

Hier ist mein Code:

from tkinter import * 
from PIL import Image, ImageTk 

def bmpGUI(): 
    top=Tk() 

    top.title("BMP Image") 

    image = Image.open("ap41.ddr.brf.sdat.bmp") 
    widthBMP, heightBMP = image.size 
    tkimage = ImageTk.PhotoImage(image) 
    w = Canvas(top, width=widthBMP+200, height=heightBMP) 
    w.create_image((widthBMP/2,heightBMP/2),image=tkimage) 

    w.pack() 

    top.mainloop() 
    return 

def main(): 
    bmpGUI() 

if __name__ == "__main__": 
    main() 

Ich habe 200px auf die Breite, um zu zeigen, dass ich irgendwie eine interaktive Sidebar neben dem Bild wollte.

Antwort

0

Ich würde empfehlen, ein hilfreicher Variablennamen für die Leinwand als w, auch um für diese Verwendung zu arbeiten, müssen die Leinen

tkimage.configure(cursor="plus") 
w.bind("<Button-1>", imgClick) 

pos = [] 
def imgClick(e): 
    x=w.canvasx(e.x) 
    y=w.canvasy(e.y) 
    pos.append((x,y)) 
    w.create_line(x-5,y,x+5,y, fill="red", tags="crosshair") 
    w.create_line(x,y-5,x,y+5, fill="red", tags="crosshair") 

Wenn Sie alle drei Positionen weltweit werden, Sie können einfach w.delete("crosshair") verwenden.

+0

Das hilft viel, danke! – FLCL