Guest User

popup.py

a guest
Jun 27th, 2020
282
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.54 KB | None | 0 0
  1. def popup(cls):
  2.     '''Функция переделки класса
  3. Передайте ей как аргумент нужный класс (Button, Label, Frame...),
  4. чтобы получить класс Popup (нужный класс со всплывающим окном)'''
  5.     class Popup(cls):
  6.         '''Переделанный класс
  7. При создании укажите popup_text (при желании и popup_font) для
  8. настройки всплывабщего сообщения'''
  9.         def __init__(self,master,cnf={},**kw):
  10.             from tkinter import Label as l
  11.             self.master=master; self.tk=master.tk #Tkinter
  12.             #Получить настройки "всплывайки" и удалить их из настроек
  13.             PT,PF=(kw['popup_text']if'popup_text'in kw else''),(kw['popup_font']if'popup_font'in kw else(None,))
  14.             if 'popup_text' in kw:del kw['popup_text']
  15.             if 'popup_font' in kw:del kw['popup_font']
  16.             super().__init__(master=master,cnf=cnf,**kw)#Создать виджет выше
  17.             self.bind('<Enter>',self.UP);self.bind('<Motion>',self.UP);self.bind('<Leave>',self.DN)#Реакция на движения
  18.             self.POPUP=l(self.master,text=PT,font=PF)#Создать "всплывайку"
  19.             self._conf=self.config;self.config=self.configure=self.nc #Подмена функций настройки
  20.         def nc(self,**kw):
  21.             #Настройка - текст/шрифт всплывайки? если да, передать всплывайке; если нет - родителю.
  22.             if 'popup_text' in kw:self.POPUP.config(text=kw['popup_text']);del kw['popup_text']
  23.             if 'popup_font' in kw:self.POPUP.config(font=kw['popup_font']);del kw['popup_font']
  24.             self._conf(**kw)
  25.         def UP(self,e):
  26.             self.POPUP.place(x=self.winfo_rootx()+e.x,y=self.winfo_rooty()+e.y,anchor='nw')
  27.             self.POPUP.lift()
  28.             #Это может вести себя странно
  29.         def DN(self,e):self.POPUP.place_forget()
  30.     return Popup
  31. if __name__=='__main__':
  32.     from tkinter import Tk,Button,Entry,Label
  33.     tk=Tk()
  34.     tk.title('test Test TeStEs')
  35.    
  36.     Button=popup(Button);   Label=popup(Label);   Entry=popup(Entry)
  37.    
  38.     Label(tk,text='test',popup_text='test').place(x=34,y=25)
  39.     Button(tk,text='Test',popup_text='TeStEs',popup_font=('Times',16,'bold')).place(x=50,y=50)
  40.     Entry(tk,popup_text='TESTING').place(x=0,y=100)
  41.     tk.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment