Top.Mail.Ru
Ответы

Помогите код на питон должен создавать скриншоты но код их не создайте помогите пожалуйста

Помогите код на питон должен создавать скриншоты но код их не создайте помогите пожалуйста

123456789101112131415161718192021222324252627
 import pyautogui 
import keyboard 
import os 
 
# Папка для сохранения скриншотов 
save_path = "skrin\D" 
if not os.path.exists(save_path): 
    os.makedirs(save_path) 
 
# Функция для создания скриншота 
while True: 
        def take_screenshot(): 
            # Определяем имя файла 
            files = os.listdir(save_path) 
            screenshot_number = len(files) 
            screenshot_name = os.path.join(save_path, f"{screenshot_number}.png") 
     
            # Делаем скриншот и сохраняем его 
            screenshot = pyautogui.screenshot() 
            screenshot.save(screenshot_name) 
            print(f"Скриншот сохранён: {screenshot_name}") 
 
        # Назначаем клавишу для создания скриншота 
        keyboard.add_hotkey('D', take_screenshot) 
 
        keyboard.wait('esc')  # Программа завершится при нажатии 'esc' 
 
По дате
По рейтингу
Аватар пользователя
Ученик

Ваш код имеет несколько проблем, которые могут мешать ему работать корректно. Вот исправленный и улучшенный вариант:

Функция take_screenshot должна быть определена вне цикла while True.

Использование keyboard.wait('esc') блокирует выполнение программы, поэтому лучше использовать бесконечный цикл с проверкой нажатия клавиши.

Проверка наличия папки для сохранения скриншотов должна быть выполнена один раз, а не в цикле.

Вот исправленный код:

python

12345678910111213141516171819202122232425262728293031
 import pyautogui 
import keyboard 
import os 
 
# Папка для сохранения скриншотов 
save_path = "skrin\\D" 
if not os.path.exists(save_path): 
    os.makedirs(save_path) 
 
# Функция для создания скриншота 
def take_screenshot(): 
    # Определяем имя файла 
    files = os.listdir(save_path) 
    screenshot_number = len(files) 
    screenshot_name = os.path.join(save_path, f"{screenshot_number}.png") 
 
    # Делаем скриншот и сохраняем его 
    screenshot = pyautogui.screenshot() 
    screenshot.save(screenshot_name) 
    print(f"Скриншот сохранён: {screenshot_name}") 
 
# Назначаем клавишу для создания скриншота 
keyboard.add_hotkey('D', take_screenshot) 
 
print("Нажмите 'D' для создания скриншота. Нажмите 'esc' для выхода.") 
 
# Бесконечный цикл для проверки нажатия клавиши 
while True: 
    if keyboard.is_pressed('esc'): 
        print("Выход из программы.") 
        break 

Этот код будет работать следующим образом:

Создает папку для сохранения скриншотов, если она не существует.

Определяет функцию take_screenshot, которая делает скриншот и сохраняет его в указанную папку.

Назначает горячую клавишу 'D' для создания скриншота.

В бесконечном цикле проверяет нажатие клавиши 'esc' для выхода из программы.

Теперь, когда вы нажмете 'D', скриншот будет сохранен в указанную папку, а нажатие 'esc' завершит выполнение программы.

Аватар пользователя
Мыслитель

Давай телеграмм, скину код.
Там есть небольшая хитрость, как заставить его делать не один скрин, а сколько захочешь.

Аватар пользователя
Мыслитель
1234567891011121314151617181920212223242526
 import pyautogui 
import keyboard 
import os 
 
# Папка для сохранения скриншотов 
save_path = "skrin\\D" 
if not os.path.exists(save_path): 
    os.makedirs(save_path) 
 
# Функция для создания скриншота 
def take_screenshot(): 
    # Определяем имя файла 
    files = os.listdir(save_path) 
    screenshot_number = len(files) 
    screenshot_name = os.path.join(save_path, f"{screenshot_number}.png") 
 
    # Делаем скриншот и сохраняем его 
    screenshot = pyautogui.screenshot() 
    screenshot.save(screenshot_name) 
    print(f"Скриншот сохранён: {screenshot_name}") 
 
# Назначаем клавишу для создания скриншота 
keyboard.add_hotkey('d', take_screenshot) 
 
print("Программа запущена. Нажмите 'D' для создания скриншота или 'Esc' для выхода.") 
keyboard.wait('esc')  # Программа завершится при нажатии 'esc' 
Аватар пользователя
Мастер

Вы почти всё сделали правильно! Проблема в том, что вы поместили функцию take_screenshot внутри бесконечного цикла while True:. Это значит, что она будет вызываться бесконечно, не давая программе реагировать на нажатие клавиши 'D'.

Вот исправленный код:

import pyautogui
import keyboard
import os

# Папка для сохранения скриншотов
save_path = "skrin\D"
if not os.path.exists(save_path):
os.makedirs(save_path)

# Функция для создания скриншота
def take_screenshot():
# Определяем имя файла
files = os.listdir(save_path)
screenshot_number = len(files)
screenshot_name = os.path.join(save_path, f"{screenshot_number}.png")

# Делаем скриншот и сохраняем его
screenshot = pyautogui.screenshot()
screenshot.save(screenshot_name)
print(f"Скриншот сохранён: {screenshot_name}")

# Назначаем клавишу для создания скриншота
keyboard.add_hotkey('D', take_screenshot)

keyboard.wait('esc') # Программа завершится при нажатии 'esc'


Объяснение изменений:

1. Функция вне цикла: Функция take_screenshot теперь находится вне цикла while True:.
2. Назначение горячей клавиши: keyboard.add_hotkey('D', take_screenshot) происходит вне цикла, так как нам нужно назначить горячую клавишу только один раз.

Теперь программа будет ждать, пока вы не нажмёте клавишу 'D', чтобы сделать скриншот. После нажатия 'D' функция take_screenshot будет вызвана, и скриншоты будут создаваться по мере надобности.

Дополнительные советы:

* Проверка нажатия ESC: Вы можете добавить проверку на нажатие клавиши ESC в отдельной функции и использовать ее для завершения скриптов.
* Задержка: После создания скриншота вы можете добавить небольшую задержку (например, time.sleep(0.1)) для предотвращения проблем с производительностью.
* Обработка ошибок: Вы можете добавить блок try...except для обработки ошибок, которые могут возникнуть при создании скриншотов (например, если папка для сохранения недоступна).

Надеюсь, это поможет!



Видео по теме