2017-02-12 5 views
0

In Tkinter, Python, versuche ich ein Programm zu erstellen, das das Erstellen einer Form auf einer Leinwand und mit einem Klick auf die Schaltfläche enthält, und keine weiteren Formen erstellt werden. Hier ist mein Code:Funktion erstellen, die nur einmal ausgeführt wird, nachdem sie zum ersten Mal mit Tkinter geklickt wurde?

from tkinter import * 

root = Tk() 
canvas = Canvas(root) # Creating Canvas 
canvas.pack() 

def create(event): 
    x1, y1 = (event.x - 5), (event.y - 5) 
    x2, y2 = (event.x + 5), (event.y + 5)   # Creates Rectangle Where Button Clicked 
    canvas.create_rectangle(x1,y1,x2,y2,fill='red') 

root.bind_all("<Button-1>", create) # Binds Mouse Click Button 


citybg = PhotoImage(file= r"example.png") 
citybgimage = canvas.create_image(50, 50, image=citybg) # Background for Canvas 

Meine Frage ist, wie das Rechteck nur machen kann erstellen einmal und nur einmal, und die create Funktion nicht mehr ausgeführt werden kann. Hoffe, das wurde gut erklärt, und ich hoffe, dass es gut beantwortet werden kann.

+0

'root.bind_all()' gibt die Funktion zurück, die dem Ereignis zuvor zugewiesen wurde. Speichern Sie diesen Wert und binden Sie dann ("", previous_value) ', wenn Sie es wiederherstellen möchten (wahrscheinlich in der' create() '-Funktion). – martineau

Antwort

2

Nun, eine einfache Lösung (aber nicht so recht) wird eine Boolesche Flag hinzuzufügen, die seine Setzen Sie True, wenn die Funktion zum ersten Mal ausgeführt wird. Dann verwenden Sie if-Anweisung und zurück und nichts tun in create wenn True.

so etwas wie diese (createRan - ist die Boolean-Flag):

root = Tk() 
canvas = Canvas(root) # Creating Canvas 
canvas.pack() 
createRan = False 


def create(event): 
    if(createRan): 
     return 
    else: 
     createRan=True 
     x1, y1 = (event.x - 5), (event.y - 5) 
     x2, y2 = (event.x + 5), (event.y + 5)   # Creates Rectangle Where Button Clicked 
     canvas.create_rectangle(x1,y1,x2,y2,fill='red') 
3

einen boolean verwendet um zu überprüfen, ob das Rechteck bereits so angelegt ist oder nicht, ist:

rectangleCreated = False 

def create(event): 
    if rectangleCreated: 
     return 
    x1, y1 = (event.x - 5), (event.y - 5) 
    x2, y2 = (event.x + 5), (event.y + 5) 
    canvas.create_rectangle(x1,y1,x2,y2,fill='red') 
    rectangleCreated = True 
0

Ich glaube, Sie die Funktion nach dem Beenden der Funktion läuft entbinden können. So:

def create(event): 
    x1, y1 = (event.x - 5), (event.y - 5) 
    x2, y2 = (event.x + 5), (event.y + 5) # Creates Rectangle Where Button Clicked 
    canvas.create_rectangle(x1,y1,x2,y2,fill='red') 
    root.unbind_all('<Button-1>') #You can later bind <Button-1> to other functions as well 
+0

Sieht so aus, als wäre es die einfachste und praktischste Lösung. :) –

Verwandte Themen