Я немного покопался в своей проблеме и до сих пор не могу выяснить ее источник, поэтому я надеюсь, что кто-то может мне помочь в этом.
Я недавно начал работать над проектом, используяGTK, Glade и C, чтобы сделать небольшую программу с графическим интерфейсом, но вот в чем дело: я не могу изменить метки, отображаемые в окне, которое появляется, когда я нажимаю на кнопку.
Это моя точка зрения на Glade и сигналы, связанные с кнопкой, называемой
интерфейсом на Glade для всплывающего окна
обратные вызовы функций в моем gtk functions c файле с поляны
на втором изображении обратный вызов на событие «clicked» находится на кнопке из другого окна, есть 4 обратных вызова
Это мои C-файлы с функциями gtk
#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>
int new_window(char * window_to_build) {
GtkBuilder * builder;
GError * error = NULL;
GtkWidget *window;
builder = gtk_builder_new();
if (gtk_builder_add_from_file(builder, "interface.glade", &error) == 0){
g_printerr ("%s\n", error->message);
g_clear_error (&error);
system("pause");
return 1;
}
window = GTK_WIDGET(gtk_builder_get_object (builder, window_to_build));
gtk_builder_connect_signals(builder, NULL);
gtk_widget_show(window);
return 0;
}
int interface(int argc, char **argv){
gtk_init (&argc, &argv);
if (new_window("startup_window") == 1)
return 1;
gtk_main ();
return 0;
}
G_MODULE_EXPORT void login_button_clicked(GtkButton *button, gpointer user_data){
gtk_widget_hide(GTK_WIDGET(user_data));
if (new_window("login_window") == 1)
exit(EXIT_FAILURE);
}
G_MODULE_EXPORT void signup_button_clicked(GtkButton * button, gpointer user_data){
gtk_widget_hide(GTK_WIDGET(user_data));
if (new_window("signup_window") == 1)
exit(EXIT_FAILURE);
}
G_MODULE_EXPORT void return_button_clicked (GtkButton * button, gpointer user_data) {
gtk_widget_hide(GTK_WIDGET(user_data));
if (new_window("startup_window") == 1)
exit(EXIT_FAILURE);
}
G_MODULE_EXPORT void validate_button_clicked (GtkButton * button, gpointer user_data) {
gtk_widget_hide(GTK_WIDGET(user_data));
if (new_window("main_window") == 1)
exit(EXIT_FAILURE);
}
G_MODULE_EXPORT void user_info_button_clicked (GtkButton * button, gpointer user_data) {
if (new_window("user_information_window") == 1)
exit(EXIT_FAILURE);
}
G_MODULE_EXPORT void change_user_name_label (GtkButton * button, GtkLabel * name_label) {
g_print("%s\n", gtk_label_get_text(name_label));
gtk_label_set_text(name_label, "You clicked the button!");
}
G_MODULE_EXPORT void change_user_pseudo_label (GtkButton * button, GtkLabel * pseudo_label) {
gtk_label_set_text(pseudo_label, "You clicked the button!");
}
G_MODULE_EXPORT void change_user_mail_label (GtkButton * button, GtkLabel * mail_label) {
gtk_label_set_text(mail_label, "You clicked the button!");
}
Для моей первой функции обратного вызова есть g_print, который должен изменить текущую метку, котораяэто «текст», и она вытеснилада.
Это мой основной файл с первоначальным вызовом строителя
#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>
#include "headers.h"
int main (int argc, char ** argv){
if (interface(argc, argv) == 1)
return EXIT_FAILURE;
return EXIT_SUCCESS;
}
Это мой файл заголовков
#ifndef HEADERS_H_INCLUDED
#define HEADERS_H_INCLUDED
int interface(int, char **);
G_MODULE_EXPORT void login_button_clicked(GtkButton*, gpointer);
G_MODULE_EXPORT void signup_button_clicked(GtkButton*, gpointer, GtkWidget *);
#endif // HEADERS_H_INCLUDED
Итак, когда я открываю это окно, «текстовые» метки должны быть изменены, но ни одна из них не является?