Advertisement
DeaD_EyE

guten_abend_gui.py

Mar 23rd, 2023
716
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.36 KB | None | 0 0
  1. import random
  2. import sys
  3. from io import StringIO
  4. from tkinter import END, Button, Text, Tk, TclError
  5.  
  6.  
  7. class Greetings:
  8.     GREET = (
  9.         "Bonne journée",
  10.         "Добрый день",
  11.         "良い一日",
  12.         "Seid gegrüßt 🫂",
  13.         "Guten Abend 🌙",
  14.         "Hallo ❤️‍🔥",
  15.     )
  16.  
  17.     def __init__(self):
  18.         self.greetings = self._sample()
  19.  
  20.     def _sample(self):
  21.         return random.sample(self.GREET, k=len(self.GREET))
  22.  
  23.     def __call__(self):
  24.         if not self.greetings:
  25.             self.greetings = self._sample()
  26.         return self.greetings.pop()
  27.  
  28.  
  29. def blocks(namen, greetings, file=None):
  30.     if file is None:
  31.         file = sys.stdout
  32.  
  33.     namen = sorted(namen, key=str.lower)
  34.     blk = 1
  35.     done = False
  36.     current = greetings()
  37.  
  38.     while namen:
  39.         if len(current) + len(namen[0]) + 2 < 200:
  40.             current += f" @{namen.pop(0)}"
  41.             done = False
  42.         else:
  43.             # print(f"[{blk}]", file=file)
  44.             print(current, file=file)
  45.             blk += 1
  46.             current = greetings()
  47.             print(file=file)
  48.             done = True
  49.  
  50.     if not done:
  51.         #print(f"[{blk}]", file=file)
  52.         print(current, file=file)
  53.  
  54.     return file
  55.  
  56.  
  57. def strip_names(lines):
  58.     return [stripped for line in lines if (stripped := line.strip())]
  59.  
  60.  
  61. class GUI(Tk):
  62.     def __init__(self):
  63.         super().__init__()
  64.         self.text = Text(self, height=18, width=80)
  65.         self.text.pack()
  66.         self.insert_text()
  67.         Button(self, text="Generate", command=self.text_generate).pack()
  68.         Button(self, text="Clear", command=self.text_delete).pack()
  69.         Button(self, text="Close", command=self.destroy).pack()
  70.  
  71.     def insert_text(self):
  72.         try:
  73.             if text := self.text.clipboard_get().strip():
  74.                 self.text.insert("1.0", text)
  75.                 self.text_generate()
  76.         except TclError:
  77.             pass
  78.  
  79.     def text_delete(self):
  80.         self.text.delete("1.0", END)
  81.  
  82.     def text_generate(self):
  83.         s = self.text.get("1.0", END)
  84.         self.text.delete("1.0", END)
  85.         io = StringIO()
  86.         blocks(strip_names(s.splitlines()), Greetings(), io)
  87.         self.text.insert("1.0", io.getvalue())
  88.         self.text.clipboard_append(s)
  89.  
  90.  
  91. if __name__ == "__main__":
  92.     GUI().mainloop()
  93.  
  94.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement