制作仅在第一次使用Tkinter点击后仅运行一次的功能?

时间:2017-02-12 22:22:36

标签: python python-3.x tkinter

在tkinter,python中,我尝试创建一个程序,该程序涉及在画布上创建一个形状并单击按钮,并且不再创建形状。这是我的代码:

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函数不能再执行。希望这个解释得很好,我希望它能得到很好的回答。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

嗯,一个简单的解决方案(但不是那么漂亮)将添加一个布尔标志,当该函数第一次运行时将设置为True。 然后使用if语句并返回,而不是在create if中执行任何操作。

类似这样的东西(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')

答案 2 :(得分: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