Наложить все экраны и рисовать прямоугольник с помощью мыши - PullRequest
0 голосов
/ 08 апреля 2020

Я работаю над крошечной программой для захвата экрана, я хочу сделать это так же, как работает Win Snipping Tool. Сначала мне нужно наложить все экраны на слой с непрозрачностью 50%, а затем, используя мышь, нарисовать прямоугольник и прочитать координаты вершин. Честно говоря, я понятия не имею, как это кусать. Я попытался с win32api / gui, и это здорово, чтобы получить координаты мыши, но все еще не смог нарисовать прямоугольник. Моя идея (одна из многих) состоит в том, чтобы (используя PIL / ImageGrab) сделать снимки обоих дисплеев, наложить наложение и напечатать их в полноэкранном режиме на всех windows, но мне не удалось это сделать. Другая идея - взять img grab и создать два новых windows с использованием BeeWare / Toga (то есть используемого GUI фреймворка) в полноэкранном режиме, но я не смог найти никакого способа открыть окно на втором экране. Буду очень признателен за любые идеи и советы, я действительно рассчитываю на вас, так как чувствую, что зашел в тупик.

1 Ответ

0 голосов
/ 08 апреля 2020

Ну, это очень легко использовать tkinter. Хорошо, это принцип, когда я делаю свое приложение для скриншотов:

  1. Пользователь нажимает кнопку для запуска.
  2. Создайте новое окно, ширина и высота которого должны полностью охватывать все экраны, и скрыть строку заголовка (если это необходимо, возможно, используйте width=9999 и height=9999).
  3. Сделайте снимок экрана всего рабочего стола (вы можете использовать ImageGrab.grab((),all_screens=True)) для этого.
  4. Сделайте скриншот, показанный в Canvas (я знаю, что toga имеет этот виджет).
  5. Запустите поток прослушивания мыши и сохраните позицию нажатой.
  6. Когда пользователь перемещает свою мышь, создайте прямоугольник (у toga's Canvas есть функция rect()). Возможно, используйте это rect(pressed_x,pressed_y,move_x,move_y). И удалите последний прямоугольник (тогда он всегда будет показывать только один прямоугольник).
  7. Когда пользователь отпустил свою мышь, сохраните положение отпущенного. И обрежьте выделенную область с помощью ImageGrab.grab((pressed_x,pressed_y,released_x,released_y),all_screens=True).
  8. Если вы хотите показать ее в интерфейсе приложения. toga имеет виджет под названием ImageView. Вы можете поместить изображение в нем.
...