Наложите все экраны и нарисуйте прямоугольник мышью
Я работаю над крошечной программой для захвата экрана, я хочу сделать это так же, как работает Win Snipping Tool. Сначала мне нужно наложить на все экраны слой непрозрачности 50%, а затем с помощью мыши нарисовать прямоугольник и прочитать координаты вершин. Честно говоря, понятия не имею, как это укусить. Я пробовал с win32api / gui, и это здорово, чтобы получить координаты мыши, но все равно не смог нарисовать прямоугольник. Моя идея (одна из многих) состоит в том, чтобы (с помощью PIL / ImageGrab) сделать снимки обоих дисплеев, наложить наложение и распечатать их в полноэкранном режиме во всех окнах, но мне это не удалось. Другая идея - взять img grab и создать два новых окна с помощью BeeWare / Toga (то есть фреймворка GUI, который я использую) в полноэкранном режиме, но мне не удалось найти какой-либо метод для открытия окна на втором дисплее. Мы будем благодарны за любые идеи и подсказки,Я очень рассчитываю на тебя, так как чувствую, что зашла в тупик.
1 ответ
Что ж, очень просто использовать tkinter
. Хорошо, это принцип, когда я делаю свое приложение для скриншотов:
- Пользователь нажимает кнопку, чтобы начать.
- Создайте новое окно, ширина и высота которого должны покрывать все экраны, и скрыть строку заголовка (если это необходимо, возможно, используйте
width=9999
а такжеheight=9999
). - Сделайте снимок экрана всего рабочего стола (Вы можете использовать
ImageGrab.grab((),all_screens=True)
) для этого. - Сделайте скриншот, показанный в
Canvas
(Я знаю этоtoga
есть этот виджет). - Запустите поток слушателя мыши и сохраните положение нажатия.
- Когда пользователь перемещает указатель мыши, создайте прямоугольник (
toga's Canvas
иметь функциюrect()
).Может использовать этоrect(pressed_x,pressed_y,move_x,move_y)
. И удалите последний прямоугольник (тогда он всегда будет отображать только один прямоугольник). - Когда пользователь отпустил свою мышь, сохраните положение отпущенной кнопки и используйте
ImageGrab.grab((pressed_x,pressed_y,released_x,released_y),all_screens=True)
, чтобы обрезать выбранную область. - Если вы хотите отобразить это в интерфейсе приложения.
toga
есть виджет под названиемImageView
.Вы можете поместить в него изображение.