python - para - Código de personalización del widget de diseñador Qt?
qt ui python (1)
Necesito agregar algunas características a un widget de gráficos en una forma que creé usando Qt Designer.
Por ejemplo, normalmente haría algo como esto:
class custom_gv(QGraphicsView):
def __init__(self):
super().__init__()
def zoom(self):
# custom code here
Pero en este caso, la vista de gráficos es parte de la ventana que hice en Qt Designer. Sé que puede usar la función "promover a" en el diseñador Qt, pero no sé cómo utilizar eso en el código, especialmente teniendo en cuenta que uso este método para usar las ventanas del diseñador Qt:
from PyQt5.uic import loadUiType
custom_window = loadUiType(''ui.ui'')
class Window(QMainWindow, custom_window):
def __init__(self):
QMainWindow.__init__(self)
custom_window.__init__(self)
self.setupUi(self)
Entonces, ¿cómo haría para personalizar el código de la vista de gráficos en mi ventana cuando uso Qt Designer?
La forma más común de resolver esto es mediante la promoción de widgets . Esto le permitirá reemplazar un widget definido en Qt Designer con su propia clase personalizada. Los pasos para hacerlo son los siguientes:
En Qt Designer, seleccione el
QGraphicsView
que desea reemplazar, luego haga clic con el botón derecho y seleccione
Promocionar a ....
En el cuadro de diálogo, establezca el
nombre de la clase Promocionado
en "custom_gv" y establezca el
archivo de Encabezado
en la ruta de importación de python para el módulo que contiene esta clase (por ejemplo, "mypkg.widgets").
Luego haga clic en
Agregar
, y
Promocionar
, y verá el cambio de clase de "QGraphicsView" a "custom_gv" en el panel Inspector de objetos.
Cuando el archivo de
ui
Qt Designer se convierte en código PyQt, agregará automáticamente una declaración de importación como esta:
from mypkg.widgets import custom_gv
y luego en el código convertido reemplazará algo como esto:
self.graphicsView = QtWidgets.QGraphicsView(MainWindow)
con este:
self.graphicsView = custom_gv(MainWindow)
Entonces, el código en el archivo
ui
no sabe nada acerca de la clase personalizada: es solo un nombre que se importa desde otro lugar.
Eso significa que es completamente libre de escribir la clase personalizada de la forma que desee.
En PyQt, este mecanismo funciona de la misma manera con
pyuic
que con el módulo
uic
.
Las funciones
loadUi
y
loadUiType
generan exactamente el mismo código que
pyuic
.
La única diferencia es que la herramienta
pyuic
escribe el código generado en un archivo, mientras que el módulo
uic
carga directamente a través de
exec
.