[QGIS-Developer] QgsRendererPropertiesDialog crashes external python application

2019-12-03 Thread Marcelo Metello
I have an external windows standalone python application that uses pyqgis.
When I display a QgsRendererPropertiesDialog, python crashes when the user
clicks on any color button (screenshot: http://psr.me/1903oq2). The problem
seems to be in displaying the color dialog. In previous QGis versions I
could avoid this problem by using:

settings = QgsSettings()
settings.setValue('qgis/native_color_dialogs', True)

QGis then used another color dialog that did not crash my application.
However, since I updated to QGis 3.8.3 (OSGEO4W) this option no longer
works. Apparently this option has been removed.

I also noticed that QGis uses a color dialog different from the one that
appears in my application. How can I configure my application (from pyqgis)
to use the same dialog?

I wrote a very small PyQt5 application (below, at the end) that reproduces
the problem. Any thoughts on how to fix this?

Operating system: Windows 10 Home
Python version: 3.7.0 (OSGEO4W)
QGis version: 3.8.3 (OSGEO4W)

Thanks,
Marcelo Metello



from qgis.core import QgsVectorLayer, QgsStyle
from qgis.gui import QgsRendererPropertiesDialog
from PyQt5 import QtCore, QtWidgets


def editStyle():
layer = QgsVectorLayer('LineString?field=level:integer',
'contour_lines', 'memory')
dialog = QtWidgets.QDialog()
layout = QtWidgets.QVBoxLayout(dialog)

# Add symbology panel
symbPanel = QgsRendererPropertiesDialog(layer, QgsStyle.defaultStyle(),
True)
layout.addWidget(symbPanel)

# Add Ok Cancel button box
buttonBox = QtWidgets.QDialogButtonBox(QtWidgets.QDialogButtonBox.Ok |
QtWidgets.QDialogButtonBox.Cancel, QtCore.Qt.Horizontal, dialog)
buttonBox.button(QtWidgets.QDialogButtonBox.Ok).setText('Ok')
buttonBox.button(QtWidgets.QDialogButtonBox.Cancel).setText('Cancel')
buttonBox.accepted.connect(dialog.accept)
buttonBox.rejected.connect(dialog.reject)
layout.addWidget(buttonBox)

dialog.setLayout(layout)
dialog.adjustSize()

if (dialog.exec_() == QtWidgets.QDialog.Accepted):
symbPanel.apply()


# Create simple application with only one button
app = QtWidgets.QApplication([])

window = QtWidgets.QWidget()
layout = QtWidgets.QVBoxLayout()
editBtn = QtWidgets.QPushButton('Edit Style')
editBtn.clicked.connect(editStyle)
layout.addWidget(editBtn)
window.setLayout(layout)
window.show()
app.exec_()

app.exit()
___
QGIS-Developer mailing list
QGIS-Developer@lists.osgeo.org
List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer

[QGIS-Developer] QgsRendererPropertiesDialog crashes python application with PyQgis

2020-01-15 Thread Marcelo Metello
I have an external windows standalone python application that uses pyqgis.
When I display a QgsRendererPropertiesDialog, python crashes
(sometimes) when the user clicks on any color button (screenshot:
http://psr.me/1903oq2). The problem is intermitent and seems to be in
displaying the color dialog. In previous QGis versions I could avoid
this problem by using:

settings = QgsSettings()
settings.setValue('qgis/native_color_dialogs', True)

QGis then used another color dialog that did not crash my application.
However, since I updated to QGis 3.8.3 (OSGEO4W) this option no longer
works.

I wrote a very small PyQt5 application (below, at the end) that reproduces
the problem: the color button sometimes crashes the application.

Any thoughts on how to fix this?

Operating system: Windows 10 Home
Python version: 3.7.0 (OSGEO4W)
QGis version: 3.8.3 (OSGEO4W)

Thanks,
Marcelo Metello



from qgis.core import QgsVectorLayer, QgsStyle
from qgis.gui import QgsRendererPropertiesDialog
from PyQt5 import QtCore, QtWidgets


def editStyle():
layer = QgsVectorLayer('LineString?field=level:integer',
'contour_lines', 'memory')
dialog = QtWidgets.QDialog()
layout = QtWidgets.QVBoxLayout(dialog)

# Add symbology panel
symbPanel = QgsRendererPropertiesDialog(layer, QgsStyle.defaultStyle(),
True)
layout.addWidget(symbPanel)

# Add Ok Cancel button box
buttonBox = QtWidgets.QDialogButtonBox(QtWidgets.QDialogButtonBox.Ok |
QtWidgets.QDialogButtonBox.Cancel, QtCore.Qt.Horizontal, dialog)
buttonBox.button(QtWidgets.QDialogButtonBox.Ok).setText('Ok')
buttonBox.button(QtWidgets.QDialogButtonBox.Cancel).setText('Cancel')
buttonBox.accepted.connect(dialog.accept)
buttonBox.rejected.connect(dialog.reject)
layout.addWidget(buttonBox)

dialog.setLayout(layout)
dialog.adjustSize()

if (dialog.exec_() == QtWidgets.QDialog.Accepted):
symbPanel.apply()


# Create simple application with only one button
app = QtWidgets.QApplication([])

window = QtWidgets.QWidget()
layout = QtWidgets.QVBoxLayout()
editBtn = QtWidgets.QPushButton('Edit Style')
editBtn.clicked.connect(editStyle)
layout.addWidget(editBtn)
window.setLayout(layout)
window.show()
app.exec_()

app.exit()
___
QGIS-Developer mailing list
QGIS-Developer@lists.osgeo.org
List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer