xticks xlabel python tabs pyside qwidget qlayout

xlabel - plot python



QLayout: intento de agregar QLayout "" a QWidget "", que ya tiene un diseƱo (1)

Quiero crear algunas pestañas y leo esta respuesta: Cómo agregar una pestaña en PySide

Utilizo el código en la respuesta e hice algunos cambios. Porque mi código tiene que leer algunos archivos y obtener el nombre de mis pestañas de esos archivos, por lo que agrego un bucle for en mi código. Y aquí está mi código.

from PySide import QtCore, QtGui import sys import dflash_controller as con if __name__ == "__main__": list = [[''a'', 3], [''b'', 4], [''c'', 5], [''d'', 6]] app = QtGui.QApplication(sys.argv) wid = QtGui.QWidget() grid = QtGui.QGridLayout(wid) wid.setLayout(grid) # setting the inner widget and layout grid_inner = QtGui.QGridLayout(wid) wid_inner = QtGui.QWidget(wid) wid_inner.setLayout(grid_inner) # add the inner widget to the outer layout grid.addWidget(wid_inner) # add tab frame to widget wid_inner.tab = QtGui.QTabWidget(wid_inner) grid_inner.addWidget(wid_inner.tab) # create tab for i, index in enumerate(list[0:]): new_tab = QtGui.QWidget(wid_inner.tab) grid_tab = QtGui.QGridLayout(new_tab) grid_tab.setSpacing(10) wid_inner.tab.addTab(new_tab, index[0]) new_tab.setLayout(grid_tab) wid.show() app.exec_()

Realmente se muestra mis pestañas. Sin embargo, me encontré con una advertencia: QLayout: intento de agregar QLayout "" a QWidget "", que ya tiene un diseño Dado que este código de tabulación es solo una parte del código completo, el problema bloqueará el flujo de datos. Y no tengo idea de lo que está mal con eso. Busqué respuestas, pero otras respuestas no están escritas en python.

Si alguien me puede ayudar, gracias de antemano.


Cuando asigna un widget como padre de un QLayout al pasarlo al constructor, el diseño se establece automáticamente como el diseño para ese widget. En su código no solo hace esto, sino que llama explícitamente a setlayout() . Esto no es un problema cuando el widget que se pasa es el mismo. Si son diferentes, obtendrá un error porque Qt intenta asignar el segundo diseño a su widget que ya tiene un diseño establecido.

Tu problema radica en estas líneas:

grid_inner = QtGui.QGridLayout(wid) wid_inner = QtGui.QWidget(wid)

Aquí está configurando wid como el padre para grid_inner . Qt desea establecer grid_inner como el diseño para wid , pero wid ya tiene un diseño como se estableció anteriormente. Cambiar las dos líneas anteriores a esto solucionará tu problema. Puede eliminar las llamadas a setLayout() ya que son redundantes.

wid_inner = QtGui.QWidget(wid) grid_inner = QtGui.QGridLayout(wid_inner)

Utilice uno u otro método para configurar el diseño para evitar confusiones.

Asignando un widget como padre:

widget = QtGui.QWidget() layout = QGridLayout(widget)

Estableciendo explícitamente el diseño:

widget = QtGui.QWidget() layout = QGridLayout() widget.setLayout(layout)