PyQt5 - em um QMainMenu, como tornar um QWidget o pai (temporariamente)?

eu tenho umQMainWindow que eu inicializo com umQWidget. Eu quero que cada vez que eu pressionar o botãoNew No meuQMainWiindow, abrirá oQWidget temporariamente (no meu caso, até a liberação do botão do mouse).

Estou tendo problemas para interagirQMainWindow com oQWidget. Tentei muitas opções, mas parecia que tudo o que tentei amarrava oQWidget aoQMainWindow tela, e eu não quero isso.

Será mais fácil com um exemplo:

TempWidgetMenu.py é meuQMainWindow classe. Quando eu pressionoNew, umaQWidget aparecerá, ele colorirá a tela de cinza e colorirá um retângulo ao pressionar o botão até a liberação do botão (como na ferramenta de recorte do Windows).

Eu quero que toda vez que eu pressionarNew, Poderei desenhar um retângulo de todos os pontos da tela, e isso acontece na primeira vez. Quando eu pressionoNew pela segunda vez (ou depois), ele colorirá tudo, exceto a tela do menu principal, e não responderá às ações do botão.

Eu quero que o widget seja o "pai" do programa na tela toda vez que eu pressionar o botão.

TempWidgetMenu.py (a 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()

Eu percebo que estou inicializando oTempOpacWidget uma vez no início. Eu quero inicializá-lo apenas uma vez, porque está fazendo a mesma coisa.

Como posso corrigi-lo, de modo que oTempOpacWidget será o pai toda vez que eu ligar para ele?

Edit: Se algo não estiver claro, execute o código que fará todo sentido. pressioneNew, Escolha um retângulo (com o mouse) e pressioneNew novamente para escolher outro retângulo, e você entenderá qual é o problema.

questionAnswers(2)

yourAnswerToTheQuestion