Как я могу переключаться между окнами в C на Linux с GTK3 - PullRequest
1 голос
/ 22 мая 2019

У меня есть приложение переменного тока, работающее под Linux, у него есть одно окно, которое загружается при запуске (окно 0), оно должно вызывать любое из 4 окон (окно 1 - 4)

моя проблема в том, что я не могу понятьузнать, как вызвать вторичное окно и переключиться на него.

Любая помощь приветствуется.

в S0.glade У меня есть 4 кнопки, каждая из которых вызывает процедуру diff, которая должна загружать одно из 4 окон.

Я просто не уверен, как это сделать.Я гуглил 3 дня и не придумал, что мне нужно.Пробовал много, но не повезло.это моя первая попытка чего-либо с помощью gtk.Просто перемещаюсь из-под VB.net под окнами, и я теряюсь ...

мой код выглядит так в моем основном цикле

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

    GtkBuilder      *builder; 

    /* init threads */
    gtk_init(&argc, &argv);

    builder = gtk_builder_new();
    gtk_builder_add_from_file (builder, "S0.glade", NULL);
    gtk_builder_add_from_file (builder, "S1.glade", NULL);
    gtk_builder_add_from_file (builder, "S2.glade", NULL);
    gtk_builder_add_from_file (builder, "S3.glade", NULL);

    window = GTK_WIDGET(gtk_builder_get_object(builder, "Mini"));

    g_lblStatus1 = GTK_WIDGET(gtk_builder_get_object(builder, "lblStatus1"));
    g_lblStatus2 = GTK_WIDGET(gtk_builder_get_object(builder, "lblStatus2"));
    g_lblStatus3 = GTK_WIDGET(gtk_builder_get_object(builder, "lblStatus3"));
    g_lblStatus4 = GTK_WIDGET(gtk_builder_get_object(builder, "lblStatus4"));

    g_T1_Size = GTK_WIDGET(gtk_builder_get_object(builder, "T1_Size"));
    g_T2_Size = GTK_WIDGET(gtk_builder_get_object(builder, "T2_Size"));
    g_T3_Size = GTK_WIDGET(gtk_builder_get_object(builder, "T3_Size"));
    g_T4_Size = GTK_WIDGET(gtk_builder_get_object(builder, "T4_Size"));
    g_T5_Size = GTK_WIDGET(gtk_builder_get_object(builder, "T5_Size"));
    g_T6_Size = GTK_WIDGET(gtk_builder_get_object(builder, "T6_Size"));

    g_S_1_Status = GTK_WIDGET(gtk_builder_get_object(builder, "S_1_Status"));
    g_S_2_Status = GTK_WIDGET(gtk_builder_get_object(builder, "S_2_Status"));
    g_S_3_Status = GTK_WIDGET(gtk_builder_get_object(builder, "S_3_Status"));
    g_S_4_Status = GTK_WIDGET(gtk_builder_get_object(builder, "S_4_Status"));
    g_S_5_Status = GTK_WIDGET(gtk_builder_get_object(builder, "S_5_Status"));
    g_S_6_Status = GTK_WIDGET(gtk_builder_get_object(builder, "S_6_Status"));

    g_P_1 = GTK_WIDGET(gtk_builder_get_object(builder, "P_1"));
    g_P_2 = GTK_WIDGET(gtk_builder_get_object(builder, "P_2"));
    g_P_3 = GTK_WIDGET(gtk_builder_get_object(builder, "P_3"));
    g_P_4 = GTK_WIDGET(gtk_builder_get_object(builder, "P_4"));
    g_P_5 = GTK_WIDGET(gtk_builder_get_object(builder, "P_5"));
    g_P_6 = GTK_WIDGET(gtk_builder_get_object(builder, "P_6"));

    g_V_1 = GTK_WIDGET(gtk_builder_get_object(builder, "V_1"));
    g_V_2 = GTK_WIDGET(gtk_builder_get_object(builder, "V_2"));
    g_V_3 = GTK_WIDGET(gtk_builder_get_object(builder, "V_3"));
    g_V_4 = GTK_WIDGET(gtk_builder_get_object(builder, "V_4"));
    g_V_5 = GTK_WIDGET(gtk_builder_get_object(builder, "V_5"));
    g_V_6 = GTK_WIDGET(gtk_builder_get_object(builder, "V_6"));

    g_CSLN = GTK_WIDGET(gtk_builder_get_object(builder, "CSLN"));
    g_CBLN = GTK_WIDGET(gtk_builder_get_object(builder, "CBLN"));
    g_CS_Volume = GTK_WIDGET(gtk_builder_get_object(builder, "CS_Volume"));
    g_CB_Volume = GTK_WIDGET(gtk_builder_get_object(builder, "CB_Volume"));

    g_Q_1 = GTK_WIDGET(gtk_builder_get_object(builder, "Q_1"));
    g_Q_2 = GTK_WIDGET(gtk_builder_get_object(builder, "Q_2"));
    g_Q_3 = GTK_WIDGET(gtk_builder_get_object(builder, "Q_3"));
    g_Q_4 = GTK_WIDGET(gtk_builder_get_object(builder, "Q_4"));
    g_Q_5 = GTK_WIDGET(gtk_builder_get_object(builder, "Q_5"));
    g_Q_6 = GTK_WIDGET(gtk_builder_get_object(builder, "Q_6"));

     // Images
    g_img1 = (GtkImage *)gtk_builder_get_object(builder, "img1");
    g_img2 = (GtkImage *)gtk_builder_get_object(builder, "img2");
    g_img3 = (GtkImage *)gtk_builder_get_object(builder, "img3");
    g_img4 = (GtkImage *)gtk_builder_get_object(builder, "img4");
    g_img5 = (GtkImage *)gtk_builder_get_object(builder, "img5");
    g_img6 = (GtkImage *)gtk_builder_get_object(builder, "img6");
    g_img7 = (GtkImage *)gtk_builder_get_object(builder, "img7");

    gtk_builder_connect_signals(builder, NULL);
        g_object_unref(builder);
        gtk_widget_show(window);                

        Set_Filler_Images();

        gtk_main();

    return 0;
}

Я хочу, чтобы он вызывал, скажем, окно 1 с кнопки наS0.glade и включите его.
кодировка, которую я показал, является общей для файлов S1, s2 и S3 glade.

1 Ответ

2 голосов
/ 23 мая 2019

Использование gtk_widget_show_all в обработчике сигналов :

#include <gtk/gtk.h>

void clicked(GtkWidget* sender, GtkWindow* window)
{
    gtk_widget_hide(gtk_widget_get_toplevel(sender));
    gtk_widget_show_all(GTK_WIDGET(window));
}

int main (int argc, char *argv[])
{
    gtk_init (&argc, &argv);
    GtkButton* button1, *button2, *button3, *button4;
    GtkWindow* window1, *window2, *window3;
    GtkLabel* label1, *label2, *label3;
    GtkBox *box1, *box2, *box3;

    window1 = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
    window2 = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
    window3 = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
    //----------------------------------------------------
    button1 = GTK_BUTTON(gtk_button_new());
    g_signal_connect(button1, "clicked", G_CALLBACK(clicked), window2);
    button2 = GTK_BUTTON(gtk_button_new());
    g_signal_connect(button2, "clicked", G_CALLBACK(clicked), window3);

    box1 = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL, 0));
    label1 = GTK_LABEL(gtk_label_new("splash"));
    gtk_container_add(GTK_CONTAINER(box1), GTK_WIDGET(label1));
    gtk_container_add(GTK_CONTAINER(box1), GTK_WIDGET(button1));
    gtk_container_add(GTK_CONTAINER(box1), GTK_WIDGET(button2));
    gtk_container_add(GTK_CONTAINER(window1), GTK_WIDGET(box1));
    gtk_widget_show_all(GTK_WIDGET(window1));

    //----------------------------------------------------
    button3 = GTK_BUTTON(gtk_button_new());
    g_signal_connect(button3, "clicked", G_CALLBACK(clicked), window1);

    box2 = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL, 0));
    label2 = GTK_LABEL(gtk_label_new("window1"));
    gtk_container_add(GTK_CONTAINER(box2), GTK_WIDGET(label2));
    gtk_container_add(GTK_CONTAINER(box2), GTK_WIDGET(button3));
    gtk_container_add(GTK_CONTAINER(window2), GTK_WIDGET(box2));

    //----------------------------------------------------
    button4 = GTK_BUTTON(gtk_button_new());
    g_signal_connect(button4, "clicked", G_CALLBACK(clicked), window1);

    box3 = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL, 0));
    label3 = GTK_LABEL(gtk_label_new("window2"));
    gtk_container_add(GTK_CONTAINER(box3), GTK_WIDGET(label3));
    gtk_container_add(GTK_CONTAINER(box3), GTK_WIDGET(button4));
    gtk_container_add(GTK_CONTAINER(window3), GTK_WIDGET(box3));

    //----------------------------------------------------
    gtk_main();
    return 0;
}
...