脚本不起作用(Tkinter和函数)

时间:2015-01-03 00:49:52

标签: python tkinter

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

    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()处的代码来设置该选项。我不明白为什么按下按钮不会对原始代码产生任何影响。有帮助吗?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

好的,我找到了解决办法。 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()