pyside2 qt qt4 pyqt pyqt4 pyside

qt - pyside2 - Marcador de posición para un widget personalizado



pyside vs pyqt (3)

Debe colocar un QWidget en QtDesigner y luego promoverlo en su widget personalizado. Para obtener más detalles, consulte este enlace: http://doc.qt.digia.com/qt/designer-using-custom-widgets.html

Otra opción sería crear un complemento QtDesigner para su widget, pero esto sería útil solo si necesita ubicarlo en múltiples uis.

Estoy cargando una base QMainWIndow de un archivo * .ui. Además, tengo un widget personalizado que quiero colocar en algún lugar del formulario. Actualmente puse en el archivo .ui un placeholder nombrado QVBoxLayout vacío, y en la subclase self.placeholder.addWidget(my_custom_widget) hago self.placeholder.addWidget(my_custom_widget)

Lo único que no me gusta de este enfoque es que el diseño en blanco no tiene su propio tamaño. Puedo tener un diseño con una celda y con un widget ficticio ( QLabel por ejemplo) con el tamaño que quiero, y reemplazar este widget y luego agregar mi widget personalizado, pero el método parece demasiado para mí.

¿Cuál es su enfoque para esa tarea?

Estoy usando Python (PyQt4)


Aquí hay un pequeño tutorial fácil sobre cómo promocionar un widget:

  1. Haga clic con el botón derecho en el widget que va a usar como marcador de posición y seleccione Promover a ....



  2. Complete los campos del diálogo emergente de Clases promocionadas :
    • Nombre de clase base : QWidget en este caso.
    • Nombre de clase promocionado : el nombre de clase que utilizó para definir el widget para el que está creando el marcador de posición, aquí está MyWidget
    • Header File : /path/to/MyWidget.py es la ruta al archivo en el que se coloca MyWidget .
  3. Una vez que haga clic en Agregar , la clase se creará y se mostrará, selecciónela y haga clic en Promote . Has terminado de promocionar.
  4. Esto es lo que debe ver en el panel Inspector de Objetos , el nombre de la clase ya no es QWidget , sino que es MyWidget .



  5. En el archivo en /path/to/MyWidget.py tengo una clase llamada MyWidget , y el contenido es algo como esto:

    #!/usr/bin/env python #-*- coding:utf-8 -*- from PyQt4 import QtGui class MyWidget(QtGui.QWidget): def __init__(self, parent=None): super(MyWidget, self).__init__(parent) self.labelHello = QtGui.QLabel(self) self.labelHello.setText("This is My Widget") self.layout = QtGui.QHBoxLayout(self) self.layout.addWidget(self.labelHello)


Bueno, al no tener una mejor solución por el momento, terminé con un QVBoxLayout con una celda con un espaciador:

FormClass, BaseClass = uic.loadUiType(''main_window.ui'') assert BaseClass is QtGui.QMainWindow class MainWindow(QtGui.QMainWindow, FormClass): def __init__(self): super().__init__() # uic adds a function to our class called setupUi # calling this creates all the widgets from the .ui file self.setupUi(self) # my custom widget self.web_view = WebView(self, WebPage(self, self.print_to_console)) # replace placeholder with our widget self.placeholder_layout.takeAt(0) # remove placeholder spacer # and replace it with our widget self.placeholder_layout.addWidget(self.web_view)