2017-03-05 126 views
3

我想繪製一個可行的時鐘。我正在使用600x600表單。我不能'弄清楚如何將橢圓放在表格的中心,或者如何在橢圓內添加分鐘或秒鐘刻度標記。我試過短跑,但無法讓它看起來正確。有什麼建議麼。提前致謝。Python 3 Tkinter帆布

這是我迄今所做的:

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() 

回答

5

的拉深形狀的中心時,爲它繪製指定的兩個點的中間。目前,您的形狀的中間點(從75, 75500, 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小時線順時針繪製回線。

希望這有幫助!如果有什麼不明白的地方,請在下面留言。