2017-02-12 2 views
0

tkinter에서 python, 저는 캔버스에 모양을 만들고 버튼 클릭으로 프로그램을 만들려고하고 더 이상 모양을 만들지 않으려 고합니다. 여기 내 코드는 다음과 같습니다Tkinter를 처음 사용했을 때 한 번만 실행되는 함수를 만드시겠습니까?

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 

내 질문은 사각형이 한 번만 한 번만 할 수 만들 수 있도록하고, create 기능이 더 이상 실행되지 수있는 방법입니다. 희망이 잘 설명 되었기를 바랍니다. 나는 그것이 잘 대답 될 수 있기를 바랍니다.

+0

'root.bind_all()'은 이전에 이벤트에 지정된 기능을 리턴합니다. 이 값을 저장하고'(create()'함수에서) 복원 할 때'bind ("", previous_value)'를 저장하십시오. – martineau

답변

2

음, 간단한 솔루션을 (하지만 꽤)입니다 부울 플래그를 추가하는 것입니다 함수가 처음 실행될 때 True로 설정하십시오. 그런 다음 if 문을 사용하고 return을 실행하고 True이면 create에서 아무 작업도 수행하지 않습니다.

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

처럼, 사각형이 이미 만들어 졌는지 여부를 확인하거나하지 부울를 사용

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

난 당신이 기능을 실행을 완료 한 후에는 기능을 바인딩을 해제 할 수 있다고 생각 : -이 같은

일 (createRan는 부울 플래그가 있다는 것입니다). 이와 같이 :

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

가장 단순하고 실제적인 솔루션으로 보입니다. :) –

관련 문제