的拉深形状的中心时,为它绘制指定的两个点的中间。目前,您的形状的中间点(从75, 75
到500, 500
)是237.5,因此,如果您希望其中间位置成为页面的中间位置,并保留75, 75
坐标,则必须使另一个为525, 525
以完全反映第一。
至于绘制形状,你需要在python中使用一些math
,所以我首先建议做一个图像作为时钟的背景,以减少绘制对象。但是,如果您必须在没有其他图像的情况下执行此操作,则必须先导入数学库。现在
import math
,对于数学原理:上半径r
的圆的任何点可以被表示为点(r*cosθ), (r*sinθ)
,其中θ
是从中心到该点的角度。这很重要的原因是,你希望钟面上的每条线都指向圆的中心。要做到这一点,我们需要两点来把这条线画在中心点上,幸运的是对于我们来说,这意味着线上的两个点都在不同的圆上(我们的圆和其中的一个),但是在相同的圆上从中心的角度。因为我们想要12小时左右的圆点,以及每个(总共60个点)和圆周360度(每6度1点)之间的4分钟点,我们需要一个循环,通过这一点。
for angle in range(0, 360, 6):
然后,我们要3个常量:一个用于外部圆的半径(为点,从开始),一个用于内圆(给分点,在增加),以及一个用于一个更加内心的圆圈(以小时点结束)。我们也希望它只能每隔30度选择更多的内半径(因为它每5个点出现一次,而它们之间有6个)。现在
radius_out = 225
radius_in = 0 #temporary value
if (angle % 30) == 0: #the % symbol checks for remainder
radius_in = 210
else:
radius_in = 220
,为(在python需求弧度正弦和余弦作为数学)转换成弧度:
radians = (angle/180) * math.pi
下关,分配坐标变量,所以它更容易阅读。
x_out = (radius_out * math.cos(radians)) + 300
y_out = (radius_out * math.sin(radians)) + 300
x_in = (radius_in * math.cos(radians)) + 300
y_in = (radius_in * math.sin(radians)) + 300
#the (+ 300) moves each point from a relative center of 0,0 to 300,300
最后,我们将它分配给一个列表,以便我们稍后可以访问它,如果我们需要的话。确保在for循环之前定义此列表。
coords.append(w.create_line(x_out, y_out, x_in, y_in))
这应该给你你的时钟线。
注意:由于tkinter分配x和y坐标的方式,这将从3小时线顺时针绘制回线。
希望这有帮助!如果有什么不明白的地方,请在下面留言。