I have an application which has a pyqtgraph instance in a dialog box. I want this dialog box to be modal (I don't want the user to be able to interact with the main window while the dialog box is open), so normally I would set `setWindowModality()` to `Qt.ApplicationModal`. However, this blocks the pyqtgraph's context menu from being accessible (I can right click on the pyqtgraph instance, and it shows me the context menu, but I'm not allowed to click on it).
I tried instead to set `setWindowModality()` to `Qt.WindowModal`. However, this locks the dialog box to the main window, which I don't like (I want the user to be able to see the main window while interacting with the dialog box).
Is there anyway to either:
1. Use `setWindowModality(Qt.ApplicationModal)` but not block the pyqtgraph context menu?
or
2. Use `setWindowModality(Qt.WindowModal)` but be able to undock the dialog box?
A minimal working example showing the behavior is below. You can see the 3 behaviors that result when setting the window modality to Qt.ApplicationModal, Qt.WindowModal, and Qt.NonModal.
```
from PySide2.QtWidgets import *
from PySide2.QtGui import *
from PySide2.QtCore import *
import pyqtgraph as pg
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
b = QPushButton()
b.setText("Open dialog")
self.setCentralWidget(b)
b.clicked.connect(self.showdialog)
def showdialog(self):
self.d = CustomDialog(self)
# # not modal
# self.d.setWindowModality(Qt.NonModal)
# self.d.show()
# location can't be moved
self.d.setWindowModality(Qt.WindowModal)
self.d.exec_()
# # blocks context menu
# self.d.setWindowModality(Qt.ApplicationModal)
# self.d.exec_()
class CustomDialog(QDialog):
def __init__(self, *args, **kwargs):
super(CustomDialog, self).__init__(*args, **kwargs)
buttons = QDialogButtonBox.Cancel
self.buttonBox = QDialogButtonBox(buttons)
self.buttonBox.rejected.connect(self.reject)
self.layout = QVBoxLayout()
self.layout.addWidget(pg.PlotWidget(self))
self.layout.addWidget(self.buttonBox)
self.setLayout(self.layout)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
```
Thank you.
Efrem Braun