脚本不工作(Tkinter 和函数)

Script not working (Tkinter and Functions)

所以我正在创建一个脚本来测试 tkinter,它应该在 canvas 上生成随机矩形。这是我的脚本:

    from Tkinter import *
import random

tk = Tk()

canvas = Canvas(tk, width=400, height=400)
canvas.pack()

Option = StringVar()
Option.set("None")
menu = OptionMenu(tk, Option,"None", "Colored Outlines", "Colored Fills")
menu.pack()
option = Option.get()

button = button = Button(tk, text="Generate", command="Generate")
button.pack()

colors = ['red', 'orange', 'yellow', 'green', 'blue', 'purple']

def random_rectangle(width, height):
    x1 = random.randrange(width)
    y1 = random.randrange(height)
    x2 = x1 + random.randrange(width)
    y2 = y1 + random.randrange(height)
    canvas.create_rectangle(x1, y1, x2, y2)

def random_outline_rectangle(width, height):
    x1 = random.randrange(width)
    y1 = random.randrange(height)
    x2 = x1 + random.randrange(width)
    y2 = y1 + random.randrange(height)
    color = random.choice(colors)
    canvas.create_rectangle(x1, y1, x2, y2, outline = color)

def random_color_rectangle(width, height):
    x1 = random.randrange(width)
    y1 = random.randrange(height)
    x2 = x1 + random.randrange(width)
    y2 = y1 + random.randrange(height)
    color = random.choice(colors)
    canvas.create_rectangle(x1, y1, x2, y2, fill = color)
def Generate():
    global option
    if option == "None":
        for x in range(0,100):
            random_rectangle(400, 400)
    elif option == "Colored Outlines":
        for x in range(0,100):
            random_outline_rectangle(400,400)
    elif option == "Colored Fills":
        for x in range(0,1000):
            random_color_rectangle(400,400)

tk.mainloop()

所以我的代码在没有生成按钮的情况下也能完美运行(如果我删除 def Generate:())但是当我用它运行它并按下按钮时,它什么也不做。如果没有,您必须通过更改 Option.set() 处的代码来设置选项。但是,我不明白为什么按下按钮对原始代码没有任何作用。有什么帮助吗?我该如何解决这个问题?

好的,我找到了我的解决方案。 Rawing 是对的,但我还需要在定义所有函数之后将按钮创建移动到。更新后的代码如下:

from Tkinter import *
import random

tk = Tk()

canvas = Canvas(tk, width=400, height=400)
canvas.pack()

Option = StringVar()
Option.set("None")
menu = OptionMenu(tk, Option,"None", "Colored Outlines", "Colored Fills")
menu.pack()

colors = ['red', 'orange', 'yellow', 'green', 'blue', 'purple']

def random_rectangle(width, height):
    x1 = random.randrange(width)
    y1 = random.randrange(height)
    x2 = x1 + random.randrange(width)
    y2 = y1 + random.randrange(height)
    canvas.create_rectangle(x1, y1, x2, y2)

def random_outline_rectangle(width, height):
    x1 = random.randrange(width)
    y1 = random.randrange(height)
    x2 = x1 + random.randrange(width)
    y2 = y1 + random.randrange(height)
    color = random.choice(colors)
    canvas.create_rectangle(x1, y1, x2, y2, outline=color)

def random_color_rectangle(width, height):
    x1 = random.randrange(width)
    y1 = random.randrange(height)
    x2 = x1 + random.randrange(width)
    y2 = y1 + random.randrange(height)
    color = random.choice(colors)
    canvas.create_rectangle(x1, y1, x2, y2, fill=color, outline=color)

def Generate():
    global option
    canvas.delete("all")
    if Option.get() == "None":
        for x in range(0,100):
            random_rectangle(400, 400)
    elif Option.get() == "Colored Outlines":
        for x in range(0,100):
            random_outline_rectangle(400,400)
    elif Option.get() == "Colored Fills":
        for x in range(0,1000):
            random_color_rectangle(400,400)

button = button = Button(tk, text="Generate", command=Generate)
button.pack()

tk.mainloop()