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)