实验说明:
编写程序,实现如下图所示的电子时钟。要求:
(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()