Skip to content

Instantly share code, notes, and snippets.

@umyuu
Created September 12, 2018 13:33
Show Gist options
  • Save umyuu/28f890dd8af4a437c1d5faed178e9aae to your computer and use it in GitHub Desktop.
Save umyuu/28f890dd8af4a437c1d5faed178e9aae to your computer and use it in GitHub Desktop.
from time import strftime
import tkinter as tk
from operator import add, sub


class FloatingWindow(tk.Toplevel):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.overrideredirect(True)
        self.pos = (0, 0)
        #
        self.grip = tk.Label(self, bitmap='gray25')
        self.grip.bind('<ButtonPress-1>', self.on_move_start)
        self.grip.bind('<B1-Motion>', self.on_motion)
        self.grip.pack(side=tk.LEFT)
        #
        self.clock = tk.Label(self, font=('times', 20, 'bold'), bg='lavender')
        self.clock.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
        #
        self.close_button = tk.Button(self, text='X', command=self.quit)
        self.close_button.pack(side=tk.LEFT)

        self.after(0, self.on_elapsed)

    def on_elapsed(self):
        self.clock.config(text=strftime('%H:%M:%S'))
        self.after(200, self.on_elapsed)

    def on_move_start(self, event):
        self.pos = (event.x, event.y)

    def on_motion(self, event):
        delta = tuple(map(sub, (event.x, event.y), self.pos))
        x, y = tuple(map(add, (self.winfo_x(), self.winfo_y()), delta))
        self.geometry("+%d+%d" % (x, y))


def move_center(win):
    # windowをディスプレイの中心に移動。
    win.update_idletasks()
    x = (win.winfo_screenwidth() - win.winfo_reqwidth()) / 2
    y = (win.winfo_screenheight() - win.winfo_reqheight()) / 2
    win.geometry("+%d+%d" % (x, y))


def main():
    root = tk.Tk()
    root.withdraw()
    app = FloatingWindow(root)
    move_center(app)
    app.mainloop()


if __name__ == '__main__':
    main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment