Advertisement
egor230

Лупа

May 15th, 2025
379
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.08 KB | Source Code | 0 0
  1. import tkinter as tk
  2. from PIL import Image, ImageTk, ImageGrab
  3. from pynput import keyboard
  4.  
  5. window = 140
  6. class ScreenMagnifier:
  7.  def __init__(self, root):
  8.   self.root = root
  9.   self.scale = 1.0
  10.   self.window_width = window
  11.   self.window_height = window
  12.   self.x_center = 960  # Начальная позиция центра
  13.   self.y_center = 540
  14.  
  15.   # Настройка главного окна
  16.   self.root.title("Экранная Лупа")
  17.   self.root.overrideredirect(True)
  18.   self.root.geometry(f"{self.window_width}x{self.window_height}+750+500")
  19.   self.root.configure(bg='black')
  20.  
  21.   # Создаем холст для изображения
  22.   self.canvas = tk.Canvas(root, width=self.window_width, height=self.window_height, highlightthickness=0, bd=0)
  23.   self.canvas.pack()
  24.  
  25.   # Слушатель клавиатуры
  26.   self.listener = keyboard.Listener(on_press=self.on_key_press)
  27.   self.listener.start()
  28.  
  29.   # Обработчик закрытия окна
  30.   self.root.protocol("WM_DELETE_WINDOW", self.quit)
  31.  
  32.   # Запуск обновления
  33.   self.update_image()
  34.  
  35.  def on_key_press(self, key):
  36.   """Обработка нажатий клавиш"""
  37.   step = 10
  38.   scale_step = 0.25
  39.  
  40.   # Перемещение
  41.   if key == keyboard.Key.up:
  42.    self.y_center -= step
  43.   elif key == keyboard.Key.down:
  44.    self.y_center += step
  45.   elif key == keyboard.Key.left:
  46.    self.x_center -= step
  47.   elif key == keyboard.Key.right:
  48.    self.x_center += step
  49.  
  50.   # Масштабирование
  51.   try:
  52.    if key.char == '+': self.scale += scale_step
  53.    if key.char == '-': self.scale = max(0.5, self.scale - scale_step)
  54.   except AttributeError:
  55.    pass
  56.  
  57.   # Корректировка границ
  58.   screen = ImageGrab.grab().size
  59.   half_w = (self.window_width / self.scale) / 2
  60.   half_h = (self.window_height / self.scale) / 2
  61.   self.x_center = max(half_w, min(self.x_center, screen[0] - half_w))
  62.   self.y_center = max(half_h, min(self.y_center, screen[1] - half_h))
  63.  
  64.  def update_image(self):
  65.   """Обновление изображения"""
  66.   # Рассчет области захвата
  67.   capture_w = int(self.window_width / self.scale)
  68.   capture_h = int(self.window_height / self.scale)
  69.  
  70.   bbox = (
  71.    int(self.x_center - capture_w // 2),
  72.    int(self.y_center - capture_h // 2),
  73.    int(self.x_center + capture_w // 2),
  74.    int(self.y_center + capture_h // 2)
  75.   )
  76.  
  77.   # Захват и обработка изображения
  78.   img = ImageGrab.grab(bbox).resize(
  79.    (self.window_width, self.window_height),
  80.    Image.LANCZOS
  81.   )
  82.  
  83.   # Отображение на холсте
  84.   self.photo = ImageTk.PhotoImage(img)
  85.   self.canvas.delete("all")
  86.   self.canvas.create_image(0, 0, anchor=tk.NW, image=self.photo)
  87.  
  88.   # Планирование следующего обновления
  89.   self.root.after(10, self.update_image)
  90.  
  91.  def quit(self):
  92.   """Корректное завершение"""
  93.   self.listener.stop()
  94.   self.root.destroy()
  95.  
  96.  
  97. if __name__ == "__main__":
  98.  root = tk.Tk()
  99.  app = ScreenMagnifier(root)
  100.  root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement