在 GTK+2 中点击按钮后重新定义标签

Redefine a label after a click button in GTK+2

我有以下代码,我想在按下按钮 "hlpBtn" 时更改标签 "title" 的值,但我遇到了麻烦。

#include <gtk/gtk.h>

void button_clicked(GtkWidget *widget, gpointer data)
{
    GtkWidget *title = (GtkWidget *) data;
    title = gtk_label_new("DECODED!!");
}

int main(int argc, char *argv[])
{
  GtkWidget *window;
  GtkWidget *table;
  GtkWidget *title;
  GtkWidget *wins;
  GtkWidget *halign;
  GtkWidget *halign2;
  GtkWidget *hlpBtn;

  gtk_init(&argc, &argv);

  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
  gtk_widget_set_size_request (window, 650, 850);

  gtk_window_set_title(GTK_WINDOW(window), "Windows");

  gtk_container_set_border_width(GTK_CONTAINER(window), 15);

  table = gtk_table_new(6, 4, FALSE);
  gtk_table_set_col_spacings(GTK_TABLE(table), 3);
  gtk_table_set_row_spacing(GTK_TABLE(table), 0, 3);

  title = gtk_label_new("Decrypting code...");
  halign = gtk_alignment_new(0, 0, 0, 0);
  gtk_container_add(GTK_CONTAINER(halign), title);
  gtk_table_attach(GTK_TABLE(table), halign, 0, 1, 0, 1,
  GTK_FILL, GTK_FILL, 0, 0);

 halign2 = gtk_alignment_new(0, 1, 0, 0);
  hlpBtn = gtk_button_new_with_label("RUN");
  gtk_container_add(GTK_CONTAINER(halign2), hlpBtn);
  gtk_widget_set_size_request(hlpBtn, 70, 30);
  gtk_table_set_row_spacing(GTK_TABLE(table), 3, 5);
  gtk_table_attach(GTK_TABLE(table), halign2, 0, 1, 4, 5,
      GTK_FILL, GTK_FILL, 0, 0);

   g_signal_connect(G_OBJECT(hlpBtn), "clicked",
      G_CALLBACK(button_clicked), title);
gtk_container_add(GTK_CONTAINER(window), table);

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

  gtk_widget_show_all(window);
  gtk_main();

  return 0;
}

我的意图是在按下 hlpBtn 时调用函数 button_clicked,然后将标题从 "Decrypting code..." 更改为 "DECODED!!"。

这里有什么问题?

谢谢。

你为什么不做这样的事情,而不是创建一个新标签?

void button_clicked(GtkWidget *widget, gpointer data)
{
    gtk_label_set_text((GtkLabel *)data, "DECODED!!");
}

您的代码有什么问题:您获取了一个指向现有标签的指针,制作了它的本地副本,创建了一个新标签并用指向新项目的指针覆盖了本地指针。问题是,覆盖指针并不意味着替换 window 中的原始项目。您需要销毁现有标签,然后添加新实例。但正如您从我的代码中看到的那样,解决方案比这简单得多:只需使用新内容更新现有标签即可。