gpt4 book ai didi

c - 如何在 GTK 中获取按钮的文本?

转载 作者:太空狗 更新时间:2023-10-29 15:20:25 25 4
gpt4 key购买 nike

我正在开发一个应用程序,当点击一个按钮时,它有一个数字键盘和一个文本框,文本框显示数字。我需要为每个按钮写一个函数吗?或者您可以将文本和小部件作为参数传递?

#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>

void callback( GtkWidget *widget,
gpointer data )
{
gtk_entry_append_text(entry, text);
}

void create_button(GtkWidget* table,GtkWidget* entry,
int start_r,int end_r,
int start_c,int end_c,
char* label)
{
GtkWidget *button;

button = gtk_button_new_with_label (label);
g_object_set_data( G_OBJECT( button ),
"char", (gpointer)label );
g_signal_connect (button, "clicked",
G_CALLBACK (callback), entry);

gtk_table_attach_defaults (GTK_TABLE(table), button, start_c, end_c, start_r, end_r);

gtk_widget_show (button);

}

gint delete_event( GtkWidget *widget,
GdkEvent *event,
gpointer data )
{
gtk_main_quit ();
return(FALSE);
}

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

GtkWidget *window;
//GtkWidget *button;
GtkWidget *table;
GtkWidget *entry;
//GtkWidget *label;

gtk_init (&argc, &argv);

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "Armario");
g_signal_connect (GTK_OBJECT (window), "delete_event",
G_CALLBACK (delete_event), NULL);
gtk_container_set_border_width (GTK_CONTAINER (window), 20);

table = gtk_table_new (2, 2, TRUE);
gtk_container_add (GTK_CONTAINER (window), table);

entry = gtk_entry_new();
gtk_entry_set_max_length(GTK_ENTRY(entry),10);
gtk_entry_set_placeholder_text(GTK_ENTRY(entry),"Teste");
gtk_table_attach_defaults (GTK_TABLE(table), entry, 0, 2, 1, 2);
gtk_widget_show(entry);

create_button(table,entry,0,1,0,1,"Botao");

gtk_widget_show (table);
gtk_widget_show (window);

gtk_main ();

return 0;
}

最佳答案

您的问题的答案是肯定的,您可以将 Gtk+ 中的小部件传递给回调。实际上,回调的第一个参数为clicked。 signal 是接收到信号的按钮(即通常是被点击的按钮)。正如您在下面的示例代码中看到的,您可以从按钮中提取其标签并将其用作文本。

[...] /* In create_button... */
/* Make your buttons be notified when they are clicked */
g_signal_connect (button, "clicked", G_CALLBACK (on_button_clicked), entry);
[...]

/* Append the text in the button to the text entry */
void on_button_clicked (GtkButton *button, gpointer user_data)
{
GtkEntry *entry = user_data;
const gchar *text = gtk_button_get_label (button);
gint position = 0;
gtk_editable_insert_text (GTK_EDITABLE (entry), text, -1, &position);
}

我正在使用 gtk_editable_insert_text因为gtk_entry_append_text已被弃用很长时间。通过使用 g_signal_connect 的最后一个参数,可以将“entry”参数传递给回调。这允许您指定一些您需要在回调中访问的数据。然后,此信息可用于“user_data”参数中的回调。

您的示例也可以通过使用 gtk_widget_show_all 得到改进,而且我也没有看到在“char”属性上调用 g_object_set_data 的意义,因为文本已经在 label 中设置了属性(并使用 gtk_button_get_label 检索)。

关于c - 如何在 GTK 中获取按钮的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9320670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com