Plataforma: Windows 10 QGis 2.18.14 QT Desiner 4.8.5 PyQT4
Estoy creando un formulario personalizado utilizando QT Designer para ser utilizado en una capa junto con una rutina en Python.
Sólo para probar he añadido un QgsColorButton
en el formulario.
La idea sería seleccionar el color en el cuadro de opciones de color de este botón y el color seleccionado se guardaría en la tabla de atributos de la característica de la capa.
Intenté hacer una pequeña rutina en Python sólo para comprobar si podía acceder a las propiedades del QgsColorButton
cuando se abrió el formulario, pero no puede ni siquiera pasar por esta fase.
¿Algún consejo para solucionar este problema?
En la consola el código parece ser sencillo, pero me cuesta entender con el acceso al QgsColorButton
del formulario creado en QT Designer.
Esta sería la plantilla de formulario con múltiples QgsColorButton
.
Necesito acceder al QgsColorButton
con algo como el siguiente código:
from qgis.core import *
from qgis.gui import *
from PyQt4.QtGui import *
from PyQt4.QtCore import *
def form_open (Dialog, layer_id, feature_id):
global form
form = Dialog
btn = form.findChild (QgsColorButton, "mColorButton")
btn.setColor (QColor (255, 0, 0, 127))
layer = iface.activeLayer ()
provider = layer.dataProvider ()
feature = layer.selectedFeatures ()
feature ['Color_01'] = btn.color ()
layer.startEditing ()
layer.updateFeature (feature)
layer.commitChanges ()
El código de arriba parece ser simple, pero no funciona como usted quiere.
Un código de segunda parte sería el QgsColorButton
cargar el color guardado en la tabla de atributos al abrir el formulario.
No tengo ni idea de cómo hacer que esto funcione.
@Francisco Raga, ¡perfecto! El único cambio que tengo que hacer es cambiar el método LoadColor.
def LoadColor ():
color_value = ToolFeature ["Color"]
if not isinstance (color_value, QPyNullVariant):
mColorButton.setColor(color_value)
return
Pero esto devolvió el siguiente error.
Traceback (most recent call last):
File "", line 1, in
File "", line 22, in UpdateColorForm
File "", line 29, in LoadColor
AttributeError: 'QPushButton' object has no attribute 'setColor'
Cuando introduzco el siguiente comando en la consola de Python del QGIS dir (QgsColorButton)
devuelve todos los métodos de QgsColorButton
y el setColor
aparece en la lista.
He compilado la plantilla ui para comprobar qué métodos y argumentos quiero devolver al método
self.mColorButton.setColor (QtGui.QColor (0, 0, 255))
No sé qué se puede hacer, porque en la consola de QGIS el setColor
es reconocido y ejecuta el código perfectamente.
Intenté usar el código de abajo, pero no pasa nada. No se muestra ningún mensaje de error y el fondo del mColorButton
no cambia de color con el valor cargado desde el "Color"
de la característica.
def LoadColor():
color_value = ToolFeature["Color"]
if not isinstance(color_value, QPyNullVariant):
style = "QWidget { background-color: %s; }" % color_value
mColorButton.setAutoFillBackground(True)
mColorButton.setStyleSheet(style)
mColorButton.update()
return
1 votos
En QGIS 2.x debe utilizar QgsColorButtonV2. Es el botón más bonito con el desplegable para los colores usados recientemente y los preestablecidos.