Python实验——tkinter 电子时钟

实验说明:

编写程序,实现如下图所示的电子时钟。要求:
(1)不显示标题栏,总是顶端显示,不被其他窗口覆盖;
(2)实时显示日期和时间;
(3)可以用鼠标左键按住拖动,在电子时钟上右击可以结束程序;
(4)拖动时透明度变大,鼠标左键抬起时恢复半透明状态

时钟如下图所示

在这里插入图片描述

import tkinter as tk
import time

#定义一个名为Clock的类,继承自tk.Tk类。
class Clock(tk.Tk):
    #定义Clock类的构造函数
    def __init__(self):
        #调用父类tk.Tk的构造函数,创建一个窗口。
        super().__init__()
        self.overrideredirect(True)  # 不显示标题栏
        self.attributes('-topmost', True)  # 总是顶端显示
        self.geometry("+0+0")  # 初始位置为屏幕左上角
        self.bind("<Button-1>", self.start_move)
        self.bind("<ButtonRelease-1>", self.stop_move)
        self.bind("<B1-Motion>", self.on_motion)
        self.bind("<Button-3>", self.quit)
        self.opacity = 0.3  # 初始透明度
        self.attributes("-alpha", self.opacity)
        self.label = tk.Label(self, font=('Courier', 40, 'bold'))
        self.label.pack()
        self.update_clock()
#用于更新时钟
    def update_clock(self):
        now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
        self.label.configure(text=now)
        self.after(1000, self.update_clock)
#处理窗口的鼠标左键单击事件
    def start_move(self, event):
        self.start_x = event.x
        self.start_y = event.y
        self.opacity = 1.0
        self.attributes("-alpha", self.opacity)
# 处理窗口的鼠标右键单击事件
    def stop_move(self, event):
        self.opacity = 0.3
        self.attributes("-alpha", self.opacity)

    def on_motion(self, event):
        x = self.winfo_x() + (event.x - self.start_x)
        y = self.winfo_y() + (event.y - self.start_y)
        self.geometry("+%s+%s" % (x, y))

    def quit(self, event):
        self.destroy()


if __name__ == '__main__':
    clock = Clock()
    clock.mainloop()