# -*- coding: utf-8 -*- import pywintypes import tkinter import win32api import win32con class OverlayLabel: def __init__(self, text="IPSUM DOLOREM", pos="BR"): self.text = text self.pos = pos self.fg = "black" self.bg = "#f1f2f2" # default transparent color self.width = 0 self.height = 0 tk = tkinter.Tk() self.label = tkinter.Label(tk, anchor="w") self.label.config(font=("Consolas", 8)) self.label.master.overrideredirect(True) self.label.master.lift() self.label.master.wm_attributes("-topmost", True) self.label.master.wm_attributes("-disabled", True) self.label.master.wm_attributes("-transparentcolor", "#f1f2f3") hWindow = pywintypes.HANDLE(int(self.label.master.frame(), 16)) exStyle = win32con.WS_EX_COMPOSITED | win32con.WS_EX_LAYERED | win32con.WS_EX_NOACTIVATE | \ win32con.WS_EX_TOPMOST | win32con.WS_EX_TRANSPARENT win32api.SetWindowLong(hWindow, win32con.GWL_EXSTYLE, exStyle) self.label.pack() self.update() def update(self): self.label.config(text=self.text) self.label.config(fg=self.fg) if self.bg == "none": self.label.config(bg="#f1f2f2") else: self.label.config(bg=self.bg) self.label.update() self.width = self.label.winfo_width() self.height = self.label.winfo_height() screen_width = win32api.GetSystemMetrics(0) screen_height = win32api.GetSystemMetrics(1) if self.pos[0] == "T": y = 0 elif self.pos[0] == "M": y = screen_height / 2 - self.height / 2 else: y = screen_height - self.height if self.pos[1] == "L": x = 0 elif self.pos[1] == "C": x = screen_width / 2 - self.width / 2 else: x = screen_width - self.width self.label.master.geometry("+{}+{}".format(int(x), int(y))) self.label.update() def set_text(self, text): self.text = text self.update() def set_bg(self, bg): self.bg = bg self.update() def set_fg(self, fg): self.fg = fg self.update() def set_pos(self, pos): self.pos = pos self.update() def set_size(self, width, height): self.width = width self.height = height self.label.config(width=self.width, height=self.height) self.update()