Создание прозрачного окна для рисования поверх всех приложений
Недавно столкнулся с проблемой рисования поверх всех приложений чтобы при этом я мог продолжать в них работать, перерыв тучу сайтов нормального ответа толком и не нашел.
В данной статье мы рассмотрим, как создать прозрачное окно для рисования на языке Python, используя библиотеку PyQt5. Мы научимся создавать окно, настраивать его прозрачность и отображать его поверх всех окон на рабочем столе, сохраняя при этом функциональность и удобство использования для пользователей.
Для создания прозрачного окна мы будем использовать мощные инструменты, предоставляемые библиотекой PyQt5.
Шаг 2: Установка необходимых библиотек
Для создания прозрачного окна мы будем использовать библиотеку PyQt5, которая предоставляет мощные инструменты для создания графического интерфейса на основе Qt.
Для установки библиотек можно воспользоваться командой pip:
pip install PyQt5
pip install pyqt5-tools
Шаг 3: Импорт необходимых модулей
После установки библиотек мы можем импортировать их в наш код:
import sys from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5.QtGui import QPainter, QBrush, QColor, QPen from PyQt5.QtCore import Qt, QTimer, QRect import random
Шаг 4: Определение класса DrawingWindow
Для создания прозрачного окна мы определяем класс DrawingWindow, который наследуется от класса QMainWindow. В конструкторе класса устанавливаются необходимые параметры окна, такие как заголовок, геометрия и флаги. Также инициализируется объект QPainter для рисования на окне.
class DrawingWindow(QMainWindow): def __init__(self, coordinates): super().__init__() # Устанавливаем заголовок окна self.setWindowTitle("Прозрачное окно для рисования") # Устанавливаем геометрию окна, чтобы оно занимало весь экран self.setGeometry(0, 0, QApplication.desktop().screenGeometry().width(), QApplication.desktop().screenGeometry().height()) # Устанавливаем флаги, чтобы окно было без рамки и оставалось поверх других окон self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowSt aysOnTopHint) # Создаем объект QPainter для рисования на окне self.painter = QPainter() self.painter.setRenderHint(QPainter.Antialiasing) # Устанавливаем начальный цвет пера (красный) и ширину пера (4 пикселя) self.pen_color = QColor(255, 0, 0) self.pen_width = 4 # Сохраняем переданные координаты прямоугольников для рисования self.coordinates = coordinates # Создаем таймер для обновления окна self.draw_timer = QTimer() # Запускаем таймер и устанавливаем интервал обновления окна (10 миллисекунд) self.draw_timer.start(10)
Шаг 5: Обновление и отображение окна
В функции paintEvent происходит обновление окна при каждом событии paintEvent. Мы используем объект QPainter для рисования на окне. Сначала рисуется прозрачный фон, затем рисуются прямоугольники с использованием координат из переменной self.coordinates.
def paintEvent(self, event): self.painter.begin(self) # Устанавливаем прозрачный фон self.painter.setPen(Qt.NoPen) self.painter.setBrush(QBrush(Qt.transparent)) self.painter.drawRect(QRect(0, 0, self.width(), self.height())) # Устанавливаем цвет пера и его ширину self.painter.setPen(QPen(QColor(self.pen_color), self.pen_width)) self.painter.setBrush(QBrush(Qt.transparent)) # Рисуем прямоугольники, используя переданные координаты for coord in self.coordinates: x, y, width, height = coord self.painter.drawRect(x, y, width, height) self.painter.end() # Обновляем координаты self.update_coord() # Планируем перерисовку через 1 секунду QTimer.singleShot(1000, self.update)
Шаг 6: Обновление координат
Координаты прямоугольников обновляются с помощью вызова метода update_coord(), который получает новые координаты с помощью функции R.run() из модуля ScreenCapture. Если новые координаты представлены в виде списка, то они сохраняются в переменную self.coordinates. В противном случае, новые координаты преобразуются в список и сохраняются.
def update_coord(self): self.coordinates = [(random.randrange(0, 1000), random.randrange(0, 1000), random.randrange(0, 1000)), (random.randrange(0, 1000), random.randrange(0, 1000), random.randrange(0, 1000))]
Шаг 7: Запуск приложения
При запуске определяются начальные координаты прямоугольников s_coordinates. Затем создается экземпляр класса Recognizer и окно DrawingWindow с передачей координат s_coordinates. Затем окно отображается с помощью метода show().
if __name__ == "__main__": # Начальные координаты прямоугольников s_coordinates = [(524, 474, 84, 64), (524, 367, 84, 47)] app = QApplication(sys.argv) # Создаем экземпляр класса Recognizer # Создаем экземпляр класса DrawingWindow с передачей координат window = DrawingWindow(s_coordinates) # Отображаем окно window.show() # Запускаем цикл обработки событий приложения и выходим, когда цикл завершится sys.exit(app.exec_())
Теперь вы знаете, как создать прозрачное окно для рисования поверх всех приложений с использованием библиотеки PyQt5 на языке Python. Это может быть полезно при создании приложений или скриптов, которые требуют взаимодействия с пользователем без прерывания их работы. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать их.

Как видно четырехугольники прекрасно отображаются поверх Pycharm и при этом не мешают работать с ним. А вообще этот кейс является частью проекта за которым можно следить здесь
import sys from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5.QtGui import QPainter, QBrush, QColor, QPen from PyQt5.QtCore import Qt, QTimer, QRect import random class DrawingWindow(QMainWindow): def __init__(self, coordinates): super().__init__() self.setWindowTitle("Transparent Drawing Window") self.setGeometry(0, 0, QApplication.desktop().screenGeometry().width(), QApplication.desktop().screenGeometry().height()) self.setAttribute(Qt.WA_TranslucentBackground, True) self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) self.painter = QPainter() self.painter.setRenderHint(QPainter.Antialiasing) self.pen_color = QColor(255, 0, 0) # Set the initial pen color to red self.pen_width = 4 # Set the initial pen width to 4 self.coordinates = coordinates # Store the coordinates for drawing rectangles self.draw_timer = QTimer() self.draw_timer.start(10) # Update the window every 10 milliseconds def paintEvent(self, event): self.painter.begin(self) self.painter.setPen(Qt.NoPen) self.painter.setBrush(QBrush(Qt.transparent)) self.painter.drawRect(QRect(0, 0, self.width(), self.height())) # Draw a transparent background self.painter.setPen(QPen(QColor(self.pen_color), self.pen_width)) self.painter.setBrush(QBrush(Qt.transparent)) for coord in self.coordinates: x, y, width, height = coord self.painter.drawRect(x, y, width, height) # Draw rectangles using the provided coordinates self.painter.end() self.update_coord() # Update the coordinates QTimer.singleShot(1000, self.update) # Schedule a repaint after 1 second def update_coord(self, coords=0): if coords != 0: pass else: self.coordinates = [ (random.randrange(0, 500), random.randrange(0, 500), random.randrange(0, 500), random.randrange(0, 500))] if __name__ == "__main__": coordinates = [(524, 474, 818-524, 689-474), (524, 367, 818-524, 473-367)] app = QApplication(sys.argv) window = DrawingWindow(coordinates) # Create an instance of the DrawingWindow class with the given coordinates window.show() # Display the window sys.exit(app.exec_()) # Start the application event loop and exit when it's finished
Просмотр: сделайте любое окно прозрачным с помощью сочетания клавиш
![]()
Какая? Вы никогда не думали об этом? Weird. Ну, в любом случае, Peek Through — это программа, которая делает одну вещь: позволяет быстро сделать любое окно в Windows прозрачным. Если вам непонятно, почему прозрачность полезна для вас, используйте свое воображение, чтобы найти ситуацию, когда ключ заглядывает.
Ненужное, импровизированное рифмование, есть много причин, по которым вы можете захотеть сделать окно в Windows прозрачным. Возможно, вы хотите, чтобы ваш медиаплеер чувствовал себя не так, как вы, или хотите делать заметки во время чтения без полной блокировки исходного материала. Возможно, вы любите свои обои настолько сильно, что хотите смотреть на них во время просмотра веб-страниц, или, может быть, вы просто думаете, что прозрачность иногда полезна для многозадачности.
Независимо от вашей причины, Peek Through — это простое приложение для Windows, которое находится в системном трее и быстро делает прозрачным любое окно с помощью пользовательского сочетания клавиш. Вот как это работает.
Использование Peek Through
Peek Through рекламируется для работы с Windows XP, Vista и 7; Я обнаружил, что это также хорошо работает в режиме рабочего стола Windows 8. Прозрачные окна выглядят великолепно.

Само программное обеспечение живет в системном трее после запуска, ожидая, когда вы воспользуетесь сочетанием клавиш.

Только когда вы используете это сочетание клавиш, которое вы можете установить как угодно, данное окно станет прозрачным. Вы сможете увидеть все, что находится за заданным окном — ваш рабочий стол, другое программное обеспечение и даже значки на рабочем столе.

Снова используйте тот же самый ярлык на клавиатуре, и эта программа вернется в нормальное состояние. Программа остается в стороне, если вам это не нужно, и это хорошо.
Вы можете настроить, как станут прозрачными окнами, и можно ли «щелкать» прозрачные окна (т. Е. Игнорировать ли любое прозрачное окно мышью или нет).

Настройте запуск программы, когда Windows это сделает, если вы планируете регулярно ее использовать. За этим не так много настроек: Peek Through прост, и любое дальнейшее усложнение, вероятно, не принесло бы много пользы.
Скачать Peek Through
Готовы попробовать эту программу? Загрузите Peek Through прямо сейчас с LukePayneSoftware.com . Как всегда с бесплатным программным обеспечением, созданным добровольцами, рассмотрите возможность пожертвования, если вам нравится то, что вы получаете: это поможет большему количеству программного обеспечения, как это.
Вывод
Благодаря Compiz я постоянно использовал подобную функцию в Ubuntu. Я написал бы в прозрачном окне, все еще имея возможность ссылаться на мой исходный материал в окне ниже. Возможность делать то же самое в Windows — это прекрасно.
Вы можете возразить, что большие мониторы устраняют необходимость в этом — теперь есть много экранного пространства — но все же приятно иметь возможность: вы никогда не знаете, когда это может пригодиться. И даже если это не так, иногда прозрачные окна выглядят просто красиво.
Но я хочу знать, что ты думаешь. Для чего вы используете Peek Through? Дайте мне знать в комментариях ниже, вместе с любыми другими программами настройки рабочего стола, которыми вы хотите поделиться.
Да, и вот несколько советов:
- Как включить и устранить Aero-эффекты в Windows 7включить и устранить Aero-эффекты в Windows 7включить и устранить Aero-эффекты в
- Улучшение управления окнами в OS X с помощью на плаву (можно сделать любое окно прозрачным).
- ClearLock, прозрачный замок для Windows
Компьютерная грамотность с Надеждой

Заполняем пробелы — расширяем горизонты!
Прозрачность окон в Windows 10: как их сделать непрозрачными
Прозрачность окон и элементов управления впервые возникли в Windows Vista и затем остались в Windows 7, 8 и 10.
p, blockquote 1,0,0,0,0 —>
Такое оформление интерфейса может потреблять большое количество ресурсов. Это плохо сказывается на быстродействии компьютера.
p, blockquote 2,0,0,0,0 —>
p, blockquote 3,0,0,0,0 —>
p, blockquote 4,0,0,0,0 —>
Что такое прозрачные окна в Windows?

Так выглядят прозрачные окна в Windows 10, если светлое окно расположено поверх темного окна.
Если одно окно расположено поверх другого окна, то цвет нижнего окна может «проступать», то есть, как бы «отражаться» на верхнем окне. Особенно это заметно, если нижнее окно является темным, а верхнее — светлым.
p, blockquote 5,0,0,0,0 —>
По умолчанию прозрачность окон в Windows 10 включена. Другими словами, разработчики системы решили, что нам, пользователям, так будет лучше. Тем не менее пользователи иногда ищут эффективные способы, чтобы устранить прозрачность окон в Windows.
p, blockquote 6,0,1,0,0 —>
Ниже рассказывается о том, как провести подобную операцию в Windows 10.
p, blockquote 7,0,0,0,0 —>
Устраняем прозрачность окон через персонализацию
Собранные в разделе «Персонализация» инструменты помогают редактировать оформление интерфейса Windows по своему усмотрению. С их помощью можно настраивать внешний облик меню «Пуск», Панели задач, Рабочего стола, набора ярлыков и других элементов.
p, blockquote 8,0,0,0,0 —>
Чтобы изменить прозрачность, предстоит выполнить 5 действий.
p, blockquote 9,0,0,0,0 —>
1) Нажимаем на кнопку «Пуск» (цифра 1 на рисунке 1). Тогда открывается меню:
p, blockquote 10,0,0,0,0 —>

Рис. 1. Кликаем «Пуск», а затем «Параметры».
2) В левом углу щелкаем пиктограмму, изображающая шестеренку (цифра 2 на рис. 1). Тогда будет открыто окно с «Параметрами» Windows 10 (рис. 2).
p, blockquote 11,0,0,0,0 —>

Рис. 2 (Кликните для увеличения). В «Параметрах» Windows 10 находятся опции «Персонализация» и «Специальные возможности».
3) В окне «Параметры Windows» кликаем по пункту «Персонализация» (1 на рис. 2).
p, blockquote 12,0,0,0,0 —>

Рис. 3. В окне «Персонализации» ─ «Цвета» ─ к пункту «Эффекты прозрачности».
4) В «Персонализации» нас интересует левая сторона. Находим строку, имеющую название «Цвета» (1 на рис. 3). Щелкаем по ней.
p, blockquote 13,1,0,0,0 —>
5) В «Цветах» скролим окно, чтобы обнаружить раздел «Эффект прозрачности» (показан цифрой 2 на рисунке 3). Кликаем по нему один раз. После этого рычаг переводится в положение «Выключено», как видно ниже на рис. 4.
p, blockquote 14,0,0,0,0 —>

Рис. 4 (Кликните для увеличения). Эффект прозрачности устранен (отключен).
Изменяем прозрачность окон через Специальные возможности
Рассмотрим второй вариант, чтобы осуществить операцию, идентичную описанной выше. Это можно сделать посредством инструментов, управляющих специальными возможностями. Они позволяют настраивать визуальную, звуковую и обратную связь системы, цветовые фильтры.
p, blockquote 15,0,0,0,0 —>
Для изменения уровня прозрачности окон Windows 10 следует сделать 5 шагов.
p, blockquote 16,0,0,0,0 —>
1) Производится щелчок на кнопке, чтобы операционная система Windows 10 показала меню «Пуск» (цифра 1 на рисунке 1 выше).
p, blockquote 17,0,0,0,0 —>
2) Нажимается значок шестеренки, открывающей окно для изменения параметров (2 на рис. 1).
p, blockquote 18,0,0,0,0 —>
3) В окне «Параметры» выбираем «Специальные возможности» (цифра 2 на рис. 2).
p, blockquote 19,0,0,0,0 —>
4) В разделе «Специальные возможности» задействуется вкладка «Дисплей» (1 на рис. 5). Там имеется «Упрощение и персонализация Windows».
p, blockquote 20,0,0,1,0 —>

Рис. 5 (Клик для увеличения). В «Специальных возможностях» можно изменить прозрачность окон.
5) Теперь рычаг «Применять прозрачность в Windows» нужно перевести в позицию «Выключено». Для этого достаточно один раз по нему кликнуть (рис. 6).
p, blockquote 21,0,0,0,0 —>

Рис. 6. Прозрачность в Windows 10 отключена.
Видеоформат статьи
p, blockquote 22,0,0,0,0 —>
p, blockquote 23,0,0,0,0 —>
p, blockquote 24,0,0,0,0 —>
p, blockquote 25,0,0,0,0 —>
p, blockquote 26,0,0,0,0 —> p, blockquote 27,0,0,0,1 —>
Как сделать окно прозрачным?
Можно ли сделать окно полностью прозрачным, но все контролы, располагающиеся внутри этого окна, должны быть видны?
- Вопрос задан более трёх лет назад
- 4904 просмотра
Комментировать
Решения вопроса 1
@implementation MyCustomWindow - (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)windowStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)deferCreation < self = [super initWithContentRect:contentRect styleMask:NSBorderlessWindowMask backing:bufferingType defer:deferCreation]; if (self) < [self setOpaque:NO]; [self setBackgroundColor:[NSColor clearColor]]; >return self; > @end
Ответ написан более трёх лет назад
Нравится 2 1 комментарий
ruman @ruman Автор вопроса
Большое спасибо!
Какраз копал в эту сторону, но забыл super init… вызвать (
Ответы на вопрос 0
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- macOS
- +2 ещё
Как избавиться от непонятных символов в docker logs?
- 2 подписчика
- 15 часов назад
- 76 просмотров