#!/usr/bin/python3
 
import tkinter 
import keyboard

class Window(tkinter.Tk):

    _congif={
        'current_x':0,
        'current_y':0,
        'saved_x':0,
        'saved_y':0,
        'width':0,
        'height':0,
        'alpha':0.85,
        'color':{
            'current':0,
            'list':['#181818','#1F1F1F']
        },
        'have_border':True,
        'size':[400,200],
        'need_keyboard':True,
        'temp_x':0,
        'temp_y':0
    }
    
    _bind_key={
        'on_triggered_add':'*',
        'on_triggered_sub':'/',
        'on_triggered_up':'+',
        'on_triggered_down':'-',
        'on_triggered_border':'.',
        'on_triggered_alpha_sub':'{',
        'on_triggered_alpha_add':'}',
        'on_triggered_need_keyboard':'F1'
    }
    
    def __init__(self,title='new window'):
        """初始化窗口"""
        super().__init__()
        self.geometry(str(self._congif['size'][0])+'x'+str(self._congif['size'][1]))
        self.title(title)
        self.attributes('-topmost',True)
        self.configure(bg=self._congif['color']['list'][0])
        self.attributes("-alpha",self._congif['alpha'])
        self.overrideredirect(self._congif['have_border'])
        self.resizable(True,True)
        self._bind_keyboard()
        self.bind('<B1-Motion>',self._move)
        self.bind('<Button-1>',self._on_mouse_press)
        self.bind('<Configure>',self._on_window_resize)
        self.bind('<Button-3>',self._change_bg)
        keyboard.add_hotkey(self._bind_key['on_triggered_need_keyboard'],self._on_triggered_need_keyboard)
        self.mainloop()

    def _move(self,event):
        """移动窗口"""
        new_x=self.winfo_x()+event.x-self._congif['temp_x']
        new_y=self.winfo_y()+event.y-self._congif['temp_y']
        self.geometry(str(self._congif['size'][0])+'x'+str(self._congif['size'][1])+'+'+str(new_x)+'+'+str(new_y))
        self._congif['current_x']=new_x
        self._congif['current_y']=new_y
    
    def _on_mouse_press(self,event):
        """记录鼠标点击的位置"""
        self._congif['temp_x']=event.x
        self._congif['temp_y']=event.y
    
    def _change_bg(self,event):
        """切换背景颜色"""
        index=(self._congif['color']['current']+1)%len(self._congif['color']['list'])
        self.configure(bg=self._congif['color']['list'][index])
        self._congif['color']['current']=index
    
    def _on_triggered_add(self):
        """记录当前窗口的位置"""
        self._congif['saved_x']=self.winfo_x()
        self._congif['saved_y']=self.winfo_y()
        print(self._congif['saved_x'],self._congif['saved_y'])

    def _on_triggered_sub(self):
        """切换窗口的位置"""
        x=self.winfo_x()
        y=self.winfo_y()
        self.geometry(str(self._congif['size'][0])+'x'+str(self._congif['size'][1])+'+'+str(self._congif['saved_x'])+'+'+str(self._congif['saved_y']))
        self._congif['saved_x']=x
        self._congif['saved_y']=y

    def _on_triggered_up(self):
        """窗口放大"""
        self._congif['size'][0]+=10
        self._congif['size'][1]+=10
        self.geometry(str(self._congif['size'][0])+'x'+str(self._congif['size'][1]))

    def _on_triggered_down(self):
        """窗口缩小"""
        if self._congif['size'][0]>10:
            self._congif['size'][0]-=10
        if self._congif['size'][1]>10:
            self._congif['size'][1]-=10
        self.geometry(str(self._congif['size'][0])+'x'+str(self._congif['size'][1]))

    def _on_window_resize(self,event):
        """窗口大小变化"""
        new_width=event.width
        new_height=event.height
        self._congif['size'][0]=new_width
        self._congif['size'][1]=new_height
        print("窗口大小变化为：{}x{},窗口位置为：{}x{}".format(new_width,new_height,self.winfo_x(),self.winfo_y()))

    def _on_triggered_border(self):
        """切换无边框于有边框"""
        self._congif['have_border']=not self._congif['have_border']
        self.overrideredirect(self._congif['have_border'])

    def _on_triggered_alpha_sub(self):
        """减少透明度"""
        if self._congif['alpha']>0.1:
            self._congif['alpha']-=0.05
        self.attributes("-alpha",self._congif['alpha'])

    def _on_triggered_alpha_add(self):
        """增加透明度"""
        if self._congif['alpha']<1:
            self._congif['alpha']+=0.05
        self.attributes("-alpha",self._congif['alpha'])

    def _on_triggered_need_keyboard(self):
        """切换是否需要键盘监听"""
        self._congif['need_keyboard']=not self._congif['need_keyboard']
        if self._congif['need_keyboard']:
            self._bind_keyboard()
        else:
            keyboard.unhook_all_hotkeys()
            keyboard.add_hotkey(self._bind_key['on_triggered_need_keyboard'],self._on_triggered_need_keyboard)
    
    def _bind_keyboard(self):
        keyboard.add_hotkey(self._bind_key['on_triggered_add'],self._on_triggered_add)
        keyboard.add_hotkey(self._bind_key['on_triggered_sub'],self._on_triggered_sub)
        keyboard.add_hotkey(self._bind_key['on_triggered_up'],self._on_triggered_up)
        keyboard.add_hotkey(self._bind_key['on_triggered_down'],self._on_triggered_down)
        keyboard.add_hotkey(self._bind_key['on_triggered_border'],self._on_triggered_border)
        keyboard.add_hotkey(self._bind_key['on_triggered_alpha_sub'],self._on_triggered_alpha_sub)
        keyboard.add_hotkey(self._bind_key['on_triggered_alpha_add'],self._on_triggered_alpha_add)

if __name__ == "__main__":
    Window()