tutorial para instalar gui descargar creator con python pyqt pyqt5 qt-designer uic

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 .