python Tkinter ゲーム作成

アナログ時計をtkinterで作ってみよう!

デザインに凝ったアナログ時計を作成するためのPythonコードを示します。このコードでは、tkinterとmathモジュールを使用して、アナログ時計のデザインを作成します。

このプログラムでは、tkinterを使ってデザインに凝ったアナログ時計を作成しています。時計盤の目盛りや針の色を変更することで、さまざまなデザインを試すことができます。また、`canvas.create_oval`や`canvas.create_line`などの関数を使って、時計のデザインにさらに工夫を加えることができます。


import tkinter as tk
import math
import time

def update_clock():
    current_time = time.localtime()
    hours = current_time.tm_hour
    minutes = current_time.tm_min
    seconds = current_time.tm_sec

    # 針の角度を計算
    hour_angle = math.radians((hours % 12) * 360 / 12 - 90)
    minute_angle = math.radians(minutes * 360 / 60 - 90)
    second_angle = math.radians(seconds * 360 / 60 - 90)

    # 針の座標を計算
    hour_x = clock_center_x + clock_radius * 0.5 * math.cos(hour_angle)
    hour_y = clock_center_y + clock_radius * 0.5 * math.sin(hour_angle)
    minute_x = clock_center_x + clock_radius * 0.75 * math.cos(minute_angle)
    minute_y = clock_center_y + clock_radius * 0.75 * math.sin(minute_angle)
    second_x = clock_center_x + clock_radius * 0.9 * math.cos(second_angle)
    second_y = clock_center_y + clock_radius * 0.9 * math.sin(second_angle)

    # 針を描画
    canvas.coords("hour", clock_center_x, clock_center_y, hour_x, hour_y)
    canvas.coords("minute", clock_center_x, clock_center_y, minute_x, minute_y)
    canvas.coords("second", clock_center_x, clock_center_y, second_x, second_y)

    # 1秒後に再度更新
    root.after(1000, update_clock)

root = tk.Tk()
root.title("アナログ時計")

clock_width = 300
clock_height = 300
clock_center_x = clock_width // 2
clock_center_y = clock_height // 2
clock_radius = clock_width // 2 - 10

canvas = tk.Canvas(root, width=clock_width, height=clock_height, bg='white')
canvas.pack()

# 時計盤の円を描画
canvas.create_oval(10, 10, clock_width - 10, clock_height - 10)

# 目盛りを描画
for i in range(60):
    angle = math.radians(i * 360 / 60 - 90)
    outer_x = clock_center_x + clock_radius * math.cos(angle)
    outer_y = clock_center_y + clock_radius * math.sin(angle)

    if i % 5 == 0:
        inner_x = clock_center_x + (clock_radius - 10) * math.cos(angle)
        inner_y = clock_center_y + (clock_radius - 10) * math.sin(angle)
    else:
        inner_x = clock_center_x + (clock_radius - 5) * math.cos(angle)
        inner_y = clock_center_y + (clock_radius - 5) * math.sin(angle)

    #針を描画するための線を作成
    canvas.create_line(outer_x, outer_y, inner_x, inner_y)
    canvas.create_line(clock_center_x, clock_center_y, clock_center_x, clock_center_y, width=6, fill="blue", tag="hour")
    canvas.create_line(clock_center_x, clock_center_y, clock_center_x, clock_center_y, width=4, fill="green", tag="minute")
    canvas.create_line(clock_center_x, clock_center_y, clock_center_x, clock_center_y, width=2, fill="red", tag="second")


    #時計の中心点を描画
    canvas.create_oval(clock_center_x - 5, clock_center_y - 5, clock_center_x + 5, clock_center_y + 5, fill="black")

    #時計を更新する関数を呼び出す
    update_clock()

    #GUIイベントループを開始
    root.mainloop()


-python, Tkinter, ゲーム作成