es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo alinear elementos con la biblioteca GTK en C/C++

Tengo un problema con la biblioteca GTK+ en C/C++.
Tengo una simple tabla GTK en la que la primera y la tercera columna contienen etiquetas con descripciones. En particular, la primera es el nombre de una prueba que se está ejecutando. La tercera es una descripción del estado de ejecución de la prueba.

La segunda columna contiene barras de progreso, una para cada fila, y como se puede ver en la imagen, no están alineadas con las etiquetas en la misma fila.

¿Cómo puedo solucionar este problema? Aquí tienes un ejemplo corto y reproducible que muestra mi problema:

int main (int argc, char *argv[]) {

    gtk_init (&argc, &argv);
    GtkWidget *win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_window_fullscreen(GTK_WINDOW(win)); 
    g_signal_connect (win, "delete_event", G_CALLBACK (gtk_main_quit),NULL);
    GtkWidget *names[7], *states[7], *bars[7];
    GtkWidget *table = gtk_table_new (7, 3, TRUE);
    for ( int i = 0 ; i < 7 ; i++ ){

        names[i] = gtk_label_new( std::string("Name" + std::to_string(i)).c_str() );
        states[i] = gtk_label_new("Modo de espera");
        bars[i] = gtk_progress_bar_new();
        gtk_table_attach_defaults (GTK_TABLE (table), names[i] , 0, 1, i, i+1);     
        gtk_table_attach_defaults (GTK_TABLE (table), bars[i] , 1, 2, i, i+1);      
        gtk_table_attach_defaults (GTK_TABLE (table), states[i] , 2, 3, i, i+1);        
    }

    gtk_container_add (GTK_CONTAINER (win), table);
    gtk_widget_show_all (win);
    gtk_main ();
    return 0;
}

La GUI que obtendrás es la siguiente:
Imagen

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para solucionar el problema de alineación con las barras de progreso y las etiquetas en la tabla GTK, puedes establecer la alineación de las barras de progreso centradas tanto horizontal como verticalmente. Esto se puede lograr agregando la siguiente línea de código después de la creación de los widgets de las barras de progreso:

    c++
    gtk_progress_bar_set_alignment(GTK_PROGRESS_BAR(bars[i]), 0.5, 0.5);

    Esto garantizará que las barras de progreso estén alineadas con el centro de la celda de la tabla, lo que debería estar en línea con las etiquetas de las primera y tercera columnas.

Comments are closed.