4 列のテーブルを作成しました。最初の列は、ループが取り込まれたチェックボックスです。実際、すべての列にループが設定されています。2 列目はテキスト エントリ entry[x][y] で、x は列、y は行です。これが私がやりたいことです。1行目のチェックボックス(checkbox[y])にチェックを入れると、2列1行目の入力ボックス(entry[x][y])の文字色を変更したいです。答えは簡単ですが、私にはわかりません。アイデア?
質問する
388 次
1 に答える
0
さて、これは私の例です。もっと単純かもしれませんが、うまくいきます。
#include <gtk/gtk.h>
#include <stdio.h>
#define TABLE 4
#define C_RED "red"
#define C_BLACK "black"
typedef struct _Widgets Widgets;
struct _Widgets
{
GtkWidget *checkbox;
GtkWidget *entry[TABLE-1];
};
static void change_color (GtkWidget *widget, gpointer data)
{
int i;
GdkColor color;
Widgets *_widget = (Widgets*) data;
gchar *cc = NULL;
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
cc = C_RED;
else
cc = C_BLACK;
gdk_color_parse (cc, &color);
for (i = 0; i < TABLE; i++)
gtk_widget_modify_fg (_widget->entry[i], GTK_STATE_NORMAL, &color);
}
int main (int argc, char **argv)
{
int x,z;
int pos = 0;
GtkWidget *window = NULL;
GtkWidget *table = NULL;
Widgets widgets[TABLE];
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW(window), "Feel Gtk Table");
g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
table = gtk_table_new (TABLE, TABLE, FALSE);
gtk_container_add (GTK_CONTAINER (window), table);
for (x = 0; x < TABLE; x++)
{
widgets[x].checkbox = gtk_check_button_new ();
gtk_table_attach_defaults (GTK_TABLE(table), widgets[x].checkbox, 0, 1, x, x+1);
g_signal_connect (G_OBJECT (widgets[x].checkbox), "toggled", G_CALLBACK (change_color), &widgets[x]);
for (z = 0; z < TABLE-1; z++)
{
widgets[x].entry[z] = gtk_entry_new();
gtk_table_attach_defaults (GTK_TABLE(table), widgets[x].entry[z], z+1, z+2, x, x+1);
}
}
gtk_widget_show_all (window);
gtk_main ();
return 0;
}
于 2012-05-29T22:41:09.903 に答える