亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3|回復: 0
收起左側

通過python程序制作時鐘的源碼

[復制鏈接]
ID:1174204 發表于 2026-6-26 15:31 | 顯示全部樓層 |閱讀模式
這是通過python程序制作時鐘的源碼,大家可做參考
  1. import tkinter as tk
  2. import math
  3. import time
  4. import threading
  5. import socket
  6. import datetime

  7. class AnalogClock:
  8.     def __init__(self, root):
  9.         self.root = root
  10.         self.root.title("Python 模擬鐘表(可縮放)")
  11.         self.root.minsize(200, 200)          # 最小窗口尺寸

  12.         self.canvas = tk.Canvas(root, bg='white')
  13.         self.canvas.pack(fill=tk.BOTH, expand=True)

  14.         # 中心點和半徑(將在 draw_face 中計算)
  15.         self.center_x = 200
  16.         self.center_y = 200
  17.         self.radius = 180

  18.         # 時間變量
  19.         self.hour = 0
  20.         self.minute = 0
  21.         self.second = 0
  22.         self.use_system_time = True

  23.         # 綁定窗口大小變化事件
  24.         self.canvas.bind("<Configure>", self.on_resize)

  25.         # 初次繪制表盤和啟動時鐘更新
  26.         self.draw_face()
  27.         self.update_clock()

  28.         # 啟動 TCP 服務器(獨立線程)
  29.         self.server_thread = threading.Thread(target=self.start_tcp_server, daemon=True)
  30.         self.server_thread.start()

  31.     def draw_face(self):
  32.         """根據當前畫布尺寸重繪表盤(刻度、數字),同時更新中心點和半徑"""
  33.         # 刪除舊表盤元素(保留指針,因為指針由 update_clock 管理)
  34.         self.canvas.delete("face")

  35.         # 獲取當前畫布尺寸
  36.         w = self.canvas.winfo_width()
  37.         h = self.canvas.winfo_height()
  38.         if w < 10 or h < 10:
  39.             return  # 避免初始尺寸過小
  40.         self.center_x = w // 2
  41.         self.center_y = h // 2
  42.         self.radius = min(w, h) // 2 - 20   # 留出邊距

  43.         # 繪制 12 個刻度及數字
  44.         for i in range(12):
  45.             angle = math.radians(i * 30 - 90)  # 12點方向為0度
  46.             # 長刻度線
  47.             x1 = self.center_x + (self.radius - 10) * math.cos(angle)
  48.             y1 = self.center_y + (self.radius - 10) * math.sin(angle)
  49.             x2 = self.center_x + (self.radius - 25) * math.cos(angle)
  50.             y2 = self.center_y + (self.radius - 25) * math.sin(angle)
  51.             self.canvas.create_line(x1, y1, x2, y2, width=3, tags="face")
  52.             # 數字
  53.             num_x = self.center_x + (self.radius - 40) * math.cos(angle)
  54.             num_y = self.center_y + (self.radius - 40) * math.sin(angle)
  55.             self.canvas.create_text(num_x, num_y, text=str(i+1),
  56.                                     font=('Arial', int(self.radius/10), 'bold'),
  57.                                     tags="face")

  58.         # 中心圓點(始終在最上層,用單獨的 tag 或不參與刪除)
  59.         self.canvas.create_oval(self.center_x-8, self.center_y-8,
  60.                                 self.center_x+8, self.center_y+8,
  61.                                 fill='black', tags="face")

  62.     def on_resize(self, event):
  63.         """窗口尺寸變化時重繪表盤(指針由 update_clock 自動適配)"""
  64.         self.draw_face()

  65.     def update_clock(self):
  66.         """每秒更新指針(使用當前中心點和半徑)"""
  67.         # 獲取系統時間(若處于系統模式)
  68.         if self.use_system_time:
  69.             now = datetime.datetime.now()
  70.             self.hour = now.hour % 12
  71.             self.minute = now.minute
  72.             self.second = now.second

  73.         # 刪除舊指針
  74.         self.canvas.delete("hands")

  75.         # 計算角度(12點方向為0度)
  76.         sec_angle = math.radians(self.second * 6 - 90)
  77.         min_angle = math.radians((self.minute + self.second/60) * 6 - 90)
  78.         hour_angle = math.radians((self.hour + self.minute/60) * 30 - 90)

  79.         # 繪制指針(長度相對半徑)
  80.         self.draw_hand(sec_angle, self.radius * 0.85, width=1, color='red', tag='hands')
  81.         self.draw_hand(min_angle, self.radius * 0.70, width=3, color='blue', tag='hands')
  82.         self.draw_hand(hour_angle, self.radius * 0.50, width=5, color='black', tag='hands')

  83.         # 繼續下一幀
  84.         self.root.after(1000, self.update_clock)

  85.     def draw_hand(self, angle, length, width=2, color='black', tag=''):
  86.         x = self.center_x + length * math.cos(angle)
  87.         y = self.center_y + length * math.sin(angle)
  88.         self.canvas.create_line(self.center_x, self.center_y, x, y,
  89.                                 width=width, fill=color, tags=tag)

  90.     # ---------- TCP 服務器(保持不變) ----------
  91.     def start_tcp_server(self):
  92.         host = '127.0.0.1'
  93.         port = 8888
  94.         with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
  95.             s.bind((host, port))
  96.             s.listen(1)
  97.             print(f"TCP 服務器已啟動,監聽 {host}:{port}")
  98.             while True:
  99.                 conn, addr = s.accept()
  100.                 with conn:
  101.                     print(f"連接來自 {addr}")
  102.                     while True:
  103.                         data = conn.recv(1024).decode().strip()
  104.                         if not data:
  105.                             break
  106.                         response = self.process_command(data)
  107.                         conn.sendall(response.encode())
  108.                         if data.lower() == 'exit':
  109.                             return

  110.     def process_command(self, cmd):
  111.         cmd = cmd.strip().lower()
  112.         if cmd == 'get_time':
  113.             return f"{self.hour:02d}:{self.minute:02d}:{self.second:02d}"
  114.         elif cmd.startswith('set_time'):
  115.             try:
  116.                 parts = cmd.split()
  117.                 if len(parts) == 2:
  118.                     t = parts[1]
  119.                     h, m, s = map(int, t.split(':'))
  120.                     if 0 <= h < 24 and 0 <= m < 60 and 0 <= s < 60:
  121.                         self.hour = h % 12
  122.                         self.minute = m
  123.                         self.second = s
  124.                         self.use_system_time = False
  125.                         return "OK: Time set"
  126.                     else:
  127.                         return "ERROR: Invalid time"
  128.             except:
  129.                 return "ERROR: Format must be 'set_time HH:MM:SS'"
  130.         elif cmd == 'reset_system_time':
  131.             self.use_system_time = True
  132.             return "OK: Switched to system time"
  133.         elif cmd == 'exit':
  134.             return "Goodbye"
  135.         else:
  136.             return f"Unknown command: {cmd}"

  137. if __name__ == "__main__":
  138.     root = tk.Tk()
  139.     clock = AnalogClock(root)
  140.     root.mainloop()
復制代碼


回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表