간단한 아날로그 시계

코멘트란에서 기능마다 함수로 한 코드를 가르쳐 주셨습니다.

매우 이해하기 쉽습니다.
감사합니다.

실행된 환경

우분투 스튜디오 17.10
파이썬 3.6.3

파이썬에서 처음으로 처음부터 만든 프로그램입니다. (도 아마추어 프로그램입니다)
Python의 형식과 구문은 거의 모든 넷에서 조사하면서 코드를 작성했습니다. (해설책은 실려 있지 않은 경우가 많고, 찾는데 시간이 걸리지만 넷이라고 곧 발견됩니다.)
X 버튼으로 종료했을 때, 에러가 나오니까? 해결책을 모르고 try:, except:, pass를 넣고 있습니다.

clock.py
#!/usr/bin/python3

from tkinter import *  #Window表示
from datetime import datetime  #日時を取得

import time  #sleepで0.1秒毎に表示を切り替える
import math  #三角関数・円周率

WINwidth = 800  #時計の大きさ(min=200:変更箇所はここだけ)
WINcolor = '#ffffff'  #BackGroundColor

WINheight = WINwidth  #Windowの高さ
S_length = WINwidth / 2 * 0.75  #秒針長さ
M_length = S_length * 0.95  #分針長さ
H_length = S_length * 0.8  #時針長さ
H_LINEwidth = 8  #時針の太さ
M_LINEwidth = H_LINEwidth / 2  #分針の太さ
S_LINEwidth = 1  #秒針の太さ

#Windowを作成
Clock = Tk()
Clock.title("AnalogClock")

w = Canvas(Clock, width = WINwidth, height = WINheight, background = WINcolor)
w.pack()

w.create_oval(WINwidth / 2 - 5, WINheight / 2 - 5, WINwidth / 2 + 5, WINheight / 2 + 5, fill="black")  #中心●
w.create_oval(5, 5, WINwidth-5, WINheight-5, width = 2)  #時計の外形円

FontSize = int(WINwidth / 14)  #時間文字のサイズ
Fx = 0  #時間文字の位置を修正
Fy = FontSize / 10
R = S_length + FontSize * 0.9  #時間文字位置の半径
A = 0  #時間文字位置の角度
for i in range(1,13):  #文字盤表示
    A = A + 30
    Tx = R * math.cos(A / 180 * math.pi)  #時間文字の座標
    Ty = R * math.sin(A / 180 * math.pi)
    w.create_text(WINwidth / 2 + Ty - Fx, WINheight / 2 - Tx + Fy, text = i, font = ("", FontSize))

try:
    while True:
        #ここから無限ループ
        now = datetime.now()  #現在の時間を取得
        if now.hour > 12:  #12時間表示
            nowhour = now.hour - 12
        else:
            nowhour = now.hour
        #秒針が動くと時分針も動かす
        nowhour = nowhour + now.minute / 60 + now.second / 3600  #時間を時に変換:例.1時30分30秒ー>1.5083・・・
        nowminute = now.minute + now.second / 60  #分秒を分に変換

        H_A = nowhour / 12 * 360 * math.pi /180  #針の角度
        M_A = nowminute / 60 * 360 * math.pi / 180
        S_A = now.second / 60 * 360 * math.pi / 180

        H_x = math.cos(H_A) * H_length  #針の先端の座標計算(中心基準)
        H_y = math.sin(H_A) * H_length
        M_x = math.cos(M_A) * M_length
        M_y = math.sin(M_A) * M_length
        S_x = math.cos(S_A) * S_length
        S_y = math.sin(S_A) * S_length

        w.create_text(WINwidth / 2 , WINheight / 2 + WINwidth / 8, text = datetime.now().strftime('%Y/%m/%d %H:%M:%S'), font = ("", int(FontSize / 1.5)), tag="Y")  #年月日時分秒

        w.create_line(WINwidth / 2, WINheight / 2, WINwidth / 2 + H_y, WINheight / 2 - H_x, width = H_LINEwidth, tag="H") #時針
        w.create_line(WINwidth / 2, WINheight / 2, WINwidth / 2 + M_y, WINheight / 2 - M_x, width = M_LINEwidth, tag="M") #分針
        w.create_line(WINwidth / 2, WINheight / 2, WINwidth / 2 + S_y, WINheight / 2 - S_x, width = S_LINEwidth, tag="S") #秒針

        w.update()  #新しい針とカレンダーを表示

        w.delete("H")  #針とカレンダーを消去
        w.delete("M")
        w.delete("S")
        w.delete("Y")

        time.sleep(0.1)  #0.1秒毎に描画
except:

    pass


200픽셀


500픽셀


800픽셀


주로 참고한 HP

즐거움 Python/Tkinter 입문
h tp // w w. 게이오시치에 s. jp / m_ 히로이 / ぃght / pyt03. HTML

파이썬 현재 시간 획득
htps : // 이 m / mykysyk @ gi te b / ms / 15d7b2b1 a 988b8 29d4

좋은 웹페이지 즐겨찾기