PyQt5: en un QMainMenu, ¿cómo hacer que un QWidget sea el padre (temporalmente)?

Tengo unQMainWindow que inicializo con unaQWidget. Quiero que cada vez que presione el botónNew En miQMainWiindow, abrirá laQWidget temporalmente (en mi caso, hasta que se suelte el botón del mouse).

Tengo problemas para interactuarQMainWindow con elQWidget. Probé muchas opciones, pero parecía que todo lo que intentaba ataba elQWidget alQMainWindow screen, y no quiero eso.

Será más fácil con un ejemplo:

TempWidgetMenu.py es miQMainWindow clase. Cuando presionoNew, unaQWidgetparecerá @, coloreará la pantalla de gris a gris y coloreará un rectángulo desde la presión de un botón hasta la liberación del botón (como en la herramienta de recorte de Windows).

Quiero eso cada vez que presionoNew, Podré dibujar un rectángulo desde cada punto de la pantalla, y así lo hace la primera vez. Cuando presionoNew por segunda vez (o después), coloreará todo menos la pantalla del menú principal y no responderá a las acciones del botón.

Quiero que el widget sea el "padre" del programa en la pantalla cada vez que presione el botón.

TempWidgetMenu.py (principal)

import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QAction
from PyQt5.QtGui import QPixmap, QPainter
import TempWidget


class Menu(QMainWindow):

    def __init__(self):
        super().__init__()
        newAct = QAction('New', self)
        newAct.triggered.connect(self.new_image_window)
        self.toolbar = self.addToolBar('Exit')
        self.toolbar.addAction(newAct)
        self.opac_rect = TempWidget.TempOpacWidget()
        self.image = QPixmap("background.png")
        self.setGeometry(100, 100, 500, 300)
        self.resize(self.image.width(), self.image.height())
        self.show()

    def new_image_window(self):
        self.opac_rect.start()

    def paintEvent(self, event):
        painter = QPainter(self)
        painter.drawPixmap(self.rect(), self.image)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainMenu = Menu()
    sys.exit(app.exec_())

TempWidget.py :

import tkinter as tk
from PyQt5 import QtWidgets, QtCore, QtGui


class TempOpacWidget(QtWidgets.QWidget):

    def __init__(self):
        super().__init__()
        root = tk.Tk()
        screen_width = root.winfo_screenwidth()
        screen_height = root.winfo_screenheight()
        self.setGeometry(0, 0, screen_width, screen_height)
        self.setWindowTitle(' ')
        self.begin = QtCore.QPoint()
        self.end = QtCore.QPoint()
        self.busy = False

    def start(self):

        self.busy = True
        self.setWindowOpacity(0.3)
        self.show()

    def paintEvent(self, event):
        if self.busy:
            brush_color = (128, 128, 255, 100)
            opacity = 0.3
        else:
            brush_color = (0, 0, 0, 0)
            opacity = 0

        self.setWindowOpacity(opacity)
        qp = QtGui.QPainter(self)
        qp.setBrush(QtGui.QColor(*brush_color))
        qp.drawRect(QtCore.QRectF(self.begin, self.end))

    def mousePressEvent(self, event):
        self.begin = event.pos()
        self.end = self.begin
        self.update()

    def mouseMoveEvent(self, event):
        self.end = event.pos()
        self.update()

    def mouseReleaseEvent(self, event):
        self.busy = False
        self.repaint()

Me doy cuenta de que estoy inicializando elTempOpacWidget una vez al comienzo. Quiero inicializarlo solo una vez, porque está haciendo lo mismo.

¿Cómo puedo solucionarlo, de modo que elTempOpacWidget será el padre cada vez que lo llame?

Edit: Si algo no está claro, ejecute el código, tendrá mucho sentido. PrensaNew, Elija un rectángulo (con el mouse) y luego presioneNew nuevamente para elegir otro rectángulo, y comprenderá cuál es el problema.

Respuestas a la pregunta(2)

Su respuesta a la pregunta