2011-08-09 48 views
0

我创建画布对象时如何使用浮点坐标?
例如: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 

它返回空白表格... 所以,我怎么还可以使用浮点数为坐标?

回答

0

你有几个问题。

  1. sin(x)决不会比-1大于1或更小,所以它是没有意义的检查y高达100你的整个循环结构是错误的。
  2. 如果你想匹配x到的整数值sin(x)(1,0,-1),您需要通过math.pi/2
  3. 繁殖x因为这样浮点运算的作品,0==sin(pi)0==sin(2*pi)不会是真​​的,你需要检查像-0.01 < sin(pi) < 0.01
  4. ​​需要两对不同的x, y - 左上角和右下角。你为两个点传递相同的值,所以如果你确实到了这一点,你将只会看到一个点。
  5. 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) 
+0

@eryksun这不是我的意图猜测太多了什么,他希望它看起来像。我改变你提到的第一件事,因为这样你至少不会试图在窗外画画;第二我不会猜测他想要什么,我在#2中提到了这个问题。 – agf