HGI*_*HGI 3 canvas tkinter python-3.x
我想画一个有效的时钟.我使用的是600x600表格.我无法弄清楚如何将椭圆放置在窗体的中心或如何在椭圆内添加分钟或秒刻度标记.我尝试过短跑,但却无法让它看起来正确.有什么建议.提前致谢.
这是我到目前为止所做的:
from tkinter import *
canvas_width = 600
canvas_height = 600
master = Tk()
w = Canvas(master, width = canvas_width, height = canvas_height)
w.pack()
oval = w.create_oval(75,75,500,500)
minline = w.create_line(150,150,300,300)
mainloop()
Run Code Online (Sandbox Code Playgroud)
绘制形状的中心是绘制时指定的两个点的中间.目前,你的形状的中间点(从中汲取75, 75到500, 500)是237.5,所以,如果你想它的中间是你的页面的中间,并保持75, 75协调,你将不得不作出另一种525, 525完全镜像第一.
至于绘制形状,你需要一些mathpython,所以我首先建议做一个图像作为时钟的背景,以便绘制更少的对象.但是,如果必须在没有其他图像的情况下执行此操作,则必须先导入数学库.
import math
Run Code Online (Sandbox Code Playgroud)
现在,对于数学原理:半径圆上的任何点r都可以表示为点(r*cos?), (r*sin?),其中?是从中心到点的角度.这一点很重要的原因是你希望钟面一侧的每条线都指向圆的中心.要做到这一点,我们需要两点来画线,一起指向中心,幸运的是,对于我们来说,这意味着线上的两个点都在不同的圆圈(我们的圆圈和其中的一个圆圈)但是在同一个圆圈上从中心角度.
因为我们想要围绕圆圈的12小时点,以及每个点之间的4分钟点(总共60个点)和360度圆圈(因此每6度1点),我们需要一个for循环通过那个.
for angle in range(0, 360, 6):
Run Code Online (Sandbox Code Playgroud)
然后我们需要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
Run Code Online (Sandbox Code Playgroud)
现在,为了转换为弧度(因为python中的数学需要sin和cos的弧度):
radians = (angle / 180) * math.pi
Run Code Online (Sandbox Code Playgroud)
接下来,将坐标分配给变量,以便更容易阅读.
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
Run Code Online (Sandbox Code Playgroud)
最后我们将它分配给一个列表,以便我们可以在以后需要时访问它.确保在for循环之前定义此列表.
coords.append( w.create_line(x_out, y_out, x_in, y_in) )
Run Code Online (Sandbox Code Playgroud)
这应该给你时钟线.
注意:由于tkinter分配x和y坐标的方式,这将从3小时线顺时针向后绘制线条.
希望这有用!如果有任何您不理解的内容,请在下面进行评论.
| 归档时间: |
|
| 查看次数: |
953 次 |
| 最近记录: |