import sys from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtCore import Qt, QRect, QPoint from PyQt5.QtGui import QPainter, QPen, QColor, QFont, QFontMetrics class OverlayCanvas(QWidget): """ UI overlay for drawing and interacting with on-screen elements. """ def __init__(self, parent=None): super().__init__(parent) # **Full-screen overlay** screen_geo = QApplication.primaryScreen().geometry() self.setGeometry(screen_geo) # Set to full screen self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) self.setAttribute(Qt.WA_TranslucentBackground, True) self.setAttribute(Qt.WA_NoSystemBackground, True) self.setAttribute(Qt.WA_OpaquePaintEvent, False) self.setAttribute(Qt.WA_AlwaysStackOnTop, True) # **Helper Object: Low Health Alert** self.helper_LowHealthAlert = QRect(250, 300, 900, 35) # Adjusted width and height self.dragging = False self.resizing = False self.drag_offset = QPoint() def paintEvent(self, event): """Draw the helper overlay objects.""" painter = QPainter(self) painter.setPen(Qt.NoPen) painter.setBrush(QColor(255, 0, 0)) # Solid red rectangle painter.drawRect(self.helper_LowHealthAlert) # Draw bold white text centered within the rectangle font = QFont("Arial", 14, QFont.Bold) # Scaled text painter.setFont(font) painter.setPen(QColor(255, 255, 255)) text = "LOW HEALTH" metrics = QFontMetrics(font) text_width = metrics.horizontalAdvance(text) text_height = metrics.height() text_x = self.helper_LowHealthAlert.center().x() - text_width // 2 text_y = self.helper_LowHealthAlert.center().y() + text_height // 4 painter.drawText(text_x, text_y, text) def mousePressEvent(self, event): """Detect clicks for dragging and resizing the helper object.""" if event.button() == Qt.LeftButton: if self.helper_LowHealthAlert.contains(event.pos()): if event.pos().x() > self.helper_LowHealthAlert.right() - 10 and event.pos().y() > self.helper_LowHealthAlert.bottom() - 10: self.resizing = True else: self.dragging = True self.drag_offset = event.pos() - self.helper_LowHealthAlert.topLeft() def mouseMoveEvent(self, event): """Handle dragging and resizing movements.""" if self.dragging: self.helper_LowHealthAlert.moveTopLeft(event.pos() - self.drag_offset) self.update() elif self.resizing: new_width = max(150, event.pos().x() - self.helper_LowHealthAlert.x()) new_height = max(20, event.pos().y() - self.helper_LowHealthAlert.y()) self.helper_LowHealthAlert.setSize(new_width, new_height) self.update() def mouseReleaseEvent(self, event): """End dragging or resizing event.""" self.dragging = False self.resizing = False if __name__ == '__main__': app_gui = QApplication(sys.argv) overlay_window = OverlayCanvas() overlay_window.show() sys.exit(app_gui.exec_())