2017-02-12 115 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()'將返回先前分配給該事件的函數。保存這個值,然後'bind(「」,previous_value)'當你想恢復它時(可能在'create()'函數中)。 – martineau

回答

2

好了,一個簡單的解決方案(但不是漂亮)將添加一個布爾標誌,這將是當函數首次運行時設置爲True。 然後使用if語句並返回並在創建時不做任何事情,如果爲True。

這樣的事情(createRan - 是布爾標誌):

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

使用Boolean檢查是否矩形已創建或沒有,這樣的:

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

我認爲你可以在運行功能完成後取消綁定功能。像這樣:

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

看起來是最簡單實用的解決方案。 :) –

相關問題