为什么在按下按钮之前调用该函数?
Why is the function called before pressing a button?
我的程序使用 pointSize_max
和 pointSize
变量绘制分形,这些变量由用户在 Tkinter 中输入。问题是分形是在按下按钮之前绘制的(只要程序是运行),当按下按钮时程序不绘制分形。
pointLabel = tk.Label(frame,text="minimaalne pikkus")
pointLabel.pack()
pointSize = tk.StringVar()
pointEntry = tk.Entry(frame,textvariable=pointSize)
pointEntry.pack()
pointSize.set(str(10))
pointLabel_max = tk.Label(frame,text="maksimaalne pikkus")
pointLabel_max.pack()
pointSize_max = tk.StringVar()
pointEntry_max = tk.Entry(frame,textvariable=pointSize_max)
pointEntry_max.pack()
pointSize_max.set(str(30))
drawButton = tk.Button(frame, text = "Draw a fractal", command=koch(int(pointSize_max.get()), int(pointSize.get())))
# koch function draws the fractal
drawButton.pack()
tk.mainloop()
创建按钮时调用 koch
函数,作为 tk.Button
调用之前参数评估的一部分。您可以创建一个函数对象来调用。
def koch_invoke():
koch(int(pointSize_max.get()), int(pointSize.get()))
drawButton = tk.Button(frame, text = "Draw a fractal", command=koch_invoke)
当你的脚本被编译时,它会到达这一行并运行函数,因为你正在调用它:
command=koch(int(pointSize_max.get()), int(pointSize.get()))
尝试使用 lambda 来防止这种情况发生:
command= lambda x = int(pointSize_max.get()), y = int(pointSize.get()): koch(x, y))
我的程序使用 pointSize_max
和 pointSize
变量绘制分形,这些变量由用户在 Tkinter 中输入。问题是分形是在按下按钮之前绘制的(只要程序是运行),当按下按钮时程序不绘制分形。
pointLabel = tk.Label(frame,text="minimaalne pikkus")
pointLabel.pack()
pointSize = tk.StringVar()
pointEntry = tk.Entry(frame,textvariable=pointSize)
pointEntry.pack()
pointSize.set(str(10))
pointLabel_max = tk.Label(frame,text="maksimaalne pikkus")
pointLabel_max.pack()
pointSize_max = tk.StringVar()
pointEntry_max = tk.Entry(frame,textvariable=pointSize_max)
pointEntry_max.pack()
pointSize_max.set(str(30))
drawButton = tk.Button(frame, text = "Draw a fractal", command=koch(int(pointSize_max.get()), int(pointSize.get())))
# koch function draws the fractal
drawButton.pack()
tk.mainloop()
创建按钮时调用 koch
函数,作为 tk.Button
调用之前参数评估的一部分。您可以创建一个函数对象来调用。
def koch_invoke():
koch(int(pointSize_max.get()), int(pointSize.get()))
drawButton = tk.Button(frame, text = "Draw a fractal", command=koch_invoke)
当你的脚本被编译时,它会到达这一行并运行函数,因为你正在调用它:
command=koch(int(pointSize_max.get()), int(pointSize.get()))
尝试使用 lambda 来防止这种情况发生:
command= lambda x = int(pointSize_max.get()), y = int(pointSize.get()): koch(x, y))