c语言 - 打开新窗口后如何关闭 GTK 窗口?



我试图在GTK上开发一个简单的菜单,用C在VSCode和Linux Mint上,这个想法是创建一个窗口,使每个按钮打开一个新窗口并关闭前一个,但我有一个艰难的时间与它。

你可以在下面的代码中看到,实际上只有一个按钮被编程为打开子菜单,但是当它打开前一个窗口不会关闭,我不知道如何使它。

我是编程新手,如果你能expĺain it ' ' for dumes ' ',我会很感激。

#include <stdlib.h>
#include <stdio.h>
#include <gtk/gtk.h>
void submenu (GtkWidget *window){
gtk_window_close(window);
GtkWidget *window2, *result2, *fixed2, *opt12, *opt22, *opt32, *opt42, *opt52;
window2 = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window2), "Test");
gtk_window_set_default_size (GTK_WINDOW (window2), 828, 512);
gtk_window_set_position(GTK_WINDOW(window2), GTK_WIN_POS_CENTER);
g_signal_connect(window2, "destroy", G_CALLBACK(gtk_main_quit), NULL);
fixed2 = gtk_fixed_new();
gtk_container_add(GTK_CONTAINER(window2), fixed2);
result2 = gtk_label_new("Choose an option");
gtk_fixed_put(GTK_FIXED(fixed2), result2, 374, 100);
gtk_widget_set_size_request(result2, 80, 30);
opt12 = gtk_button_new_with_label("Option 1");
gtk_fixed_put(GTK_FIXED(fixed2), opt12, 289, 180);
gtk_widget_set_size_request(opt12, 250, 30);
opt22 = gtk_button_new_with_label("Option 2");
gtk_fixed_put(GTK_FIXED(fixed2), opt22, 289, 220);
gtk_widget_set_size_request(opt22, 250, 30);
opt32 = gtk_button_new_with_label("Option 3");
gtk_fixed_put(GTK_FIXED(fixed2), opt32, 289, 260);
gtk_widget_set_size_request(opt32, 250, 30);
opt42 = gtk_button_new_with_label("Option 4");
gtk_fixed_put(GTK_FIXED(fixed2), opt42, 289, 300);
gtk_widget_set_size_request(opt42, 250, 30);
opt52 = gtk_button_new_with_label("Option 5");
gtk_fixed_put(GTK_FIXED(fixed2), opt52, 289, 340);
gtk_widget_set_size_request(opt52, 250, 30);

gtk_widget_show_all(window2);
}
void menu (){
GtkWidget *window, *result, *fixed, *opt1, *opt2, *opt3, *opt4, *opt5;
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "Main menu");
gtk_window_set_default_size (GTK_WINDOW (window), 828, 512);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
fixed = gtk_fixed_new();
gtk_container_add(GTK_CONTAINER(window), fixed);
result = gtk_label_new("Escolha uma Option");
gtk_fixed_put(GTK_FIXED(fixed), result, 374, 100);
gtk_widget_set_size_request(result, 80, 30);
opt1 = gtk_button_new_with_label("Option 1");
gtk_fixed_put(GTK_FIXED(fixed), opt1, 289, 180);
gtk_widget_set_size_request(opt1, 250, 30);
g_signal_connect(opt1, "clicked", G_CALLBACK(submenu), NULL);
opt2 = gtk_button_new_with_label("Option 2");
gtk_fixed_put(GTK_FIXED(fixed), opt2, 289, 220);
gtk_widget_set_size_request(opt2, 250, 30);
opt3 = gtk_button_new_with_label("Option 3");
gtk_fixed_put(GTK_FIXED(fixed), opt3, 289, 260);
gtk_widget_set_size_request(opt3, 250, 30);
opt4 = gtk_button_new_with_label("Option 4");
gtk_fixed_put(GTK_FIXED(fixed), opt4, 289, 300);
gtk_widget_set_size_request(opt4, 250, 30);
opt5 = gtk_button_new_with_label("Option 5");
gtk_fixed_put(GTK_FIXED(fixed), opt5, 289, 340);
gtk_widget_set_size_request(opt5, 250, 30);

gtk_widget_show_all(window);
}
int main(int argc, char **argv) {
gtk_init(&argc, &argv);
menu();
gtk_main();
return 0;
}

我正在编译

gcc intertest.c -o intertest `pkg-config --cflags gtk+-3.0` `pkg-config --libs gtk+-3.0`"

我以前从未使用过gtk,但也许它将永远帮助你。当你点击&quot选项1&quot;它打开子菜单,但随后两个窗口都消失了。这是因为在菜单中设置了这个信号处理程序:

g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);

在第一个窗口关闭时导致应用程序退出。当你把它注释掉时,它似乎像预期的那样工作。

最新更新