Tkinter画布坐标中的浮点值
我该如何在创建画布对象时使用浮点坐标呢?
比如:
from Tkinter import *
import math
main=Tk()
w=Canvas(main, height=100, width=100)
w.grid(row=0, column=0)
for y in range(100):
for x in range(100):
if y==math.sin(x):
w.create_oval(x, y, x, y)
x=0
这样返回的是空白的表单……那么,我该如何使用浮点数作为坐标呢?
1 个回答
0
你遇到了几个问题。
sin(x)
的值永远不会超过 1,也不会低于 -1,所以检查y
到 100 是没有意义的。你的循环结构完全错了。- 如果你想让
x
匹配sin(x)
的整数值(1、0 和 -1),你需要把x
乘以math.pi/2
。 - 由于浮点数运算的特性,
0==sin(pi)
或0==sin(2*pi)
这个判断不会成立,你需要检查类似-0.01 < sin(pi) < 0.01
的条件。 create_oval
需要两个不同的x, y
坐标对——一个是左上角,一个是右下角。你给它传了相同的值,所以如果你到达这一步,可能只会看到一个点。x=0
是多余的,因为每次你去新的y
值时,都会为x
创建一个新的range(100)
。
补充说明:@eryksun 在评论中指出,第 4 点可能是你的意图。如果是这样,那部分是对的,整体也更有意义——看起来你是在尝试绘制正弦曲线。这也意味着你不一定要把 x
乘以 math.pi / 2
。
如果是这样的话,你的代码可以改成这样(尽量少改动):
from Tkinter import *
import math
main=Tk()
w=Canvas(main, height=100, width=100)
w.grid(row=0, column=0)
for x in range(100):
# this makes the sine curve y-value
# stretch from 0 to 100 instead of -1 to 1
y = 49.5 - math.sin(x) * 49.5
w.create_oval(x, y, x, y)