首页 > 解决方案 > 在按钮单击时选择用户的选择

问题描述

我需要选择用户的选择并将值存储在全局变量中,然后在用户选择按钮后vbox,按钮应该消失并且控制权返回到create_window(). 我不知道这是否是完成此类任务的最佳方法。

#include "test.h"

int number_players;

void create_window() {

    GtkWidget *window;

    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

    gtk_window_set_title (GTK_WINDOW (window), "test");
    gtk_window_maximize (GTK_WINDOW (window));
    gtk_container_set_border_width (GTK_CONTAINER (window), 10);

    get_number_players(window);

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

    gtk_widget_show_all (window);

    g_print("%d\n", number_players);

    gtk_main();

}

void get_number_players (GtkWidget *window) {

    GtkWidget *vbox, *button_choice1, *button_choice2, *button_choice3;

    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);

    button_choice1 = gtk_button_new_with_label("six Players");
    button_choice2 = gtk_button_new_with_label("Seven Players");
    button_choice3 = gtk_button_new_with_label("nine Players");

    gtk_container_add (GTK_CONTAINER (window), vbox);
    gtk_container_add (GTK_CONTAINER (vbox), button_choice1);
    gtk_container_add (GTK_CONTAINER (vbox), button_choice2);
    gtk_container_add (GTK_CONTAINER (vbox), button_choice3);

    g_signal_connect(G_OBJECT(button_choice1), "clicked", G_CALLBACK(read_choice), GINT_TO_POINTER(6)); 
    g_signal_connect(G_OBJECT(button_choice2), "clicked", G_CALLBACK(read_choice), GINT_TO_POINTER(7));
    g_signal_connect(G_OBJECT(button_choice3), "clicked", G_CALLBACK(read_choice), GINT_TO_POINTER(9));
}

void read_choice (GtkWidget *window, gpointer data) {

    number_players = GPOINTER_TO_INT(data);
}

void destroy (GtkWidget *window, gpointer data)
{
    gtk_main_quit ();
}

number_players由于某种原因,如果我打印出来,全局变量不会正确打印,read_choice尽管我可以看到正确的值。

标签: cgtk

解决方案


推荐阅读