powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Помогите с GTK... фигня не понятная...
18 сообщений из 18, страница 1 из 1
Помогите с GTK... фигня не понятная...
    #38575683
Фотография Mash6a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет Всем! Помогите разобраться с GTK. Я нифига в нем не понимаю, психую уже 2 день. Надо сделать много кнопок, но у меня получилось 6*6. Потом по нажатию по одной кнопки, все вокруг должны поменять цвет на любой, допустим красный, в радиусе одной кнопки. А если в этом радиусе уже была красная кнопка, то она должна вернуться в прежнии цвет. Я за два дня только поняла, что это не кнопки а виджеты и получилось вот это. Помогите поменять цвет конкретной кнопки
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
#define GTK_NAME hello
#include <stdio.h>
#include <gtk/gtk.h>
#include <stdlib.h>
#define MASHA 5
GtkWidget *buttons[MASHA*MASHA];
int M[MASHA*MASHA];
static void GG(GtkWidget *btn, int icolor) {
	  GdkColor color;
          if (icolor) {
		gdk_color_parse ("red", &color);
	  } else {
		gdk_color_parse ("green", &color);
 	  }
          gtk_widget_modify_bg ( GTK_WIDGET(btn), GTK_STATE_NORMAL, &color);
}

static void callback (GtkWidget *widget, gpointer data)
{
  int d = (int)data;
  g_print ("Привет! - %dx%d была нажата\n", d/MASHA, d % MASHA);
  M[d] = 1 - M[d];
  GG(widget, M[d]);
  

}

static gboolean delete_event (GtkWidget *widget, GdkEvent *event, gpointer data)
{
  gtk_main_quit ();
  return FALSE;
} 
int main (int argc, char *argv[])
{
  GtkWidget *window;
  GtkWidget *box1;

  GtkWidget *lines[MASHA];
  gtk_init (&argc, &argv);

  for (int i=0; i < MASHA*MASHA; i++) {
      M[i] = rand() & 1;
  }
  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

  gtk_window_set_title (GTK_WINDOW (window), "Привет!");

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

  gtk_container_set_border_width (GTK_CONTAINER (window), 10);

  box1 = gtk_vbox_new (FALSE, 0);
  gtk_container_add (GTK_CONTAINER (window), box1);

  for (int l=0; l < MASHA; l++) {
      lines[l] = gtk_hbox_new(FALSE, 0);
      gtk_box_pack_start (GTK_BOX(box1), lines[l], TRUE, TRUE, 0);
      for (int i=0; i < MASHA; i++) {
      	  buttons[l*MASHA+i] = gtk_button_new_with_label("X");
          gtk_box_pack_start (GTK_BOX(lines[l]), buttons[l*MASHA+i],
			 TRUE, TRUE, 0);
	  g_signal_connect (G_OBJECT (buttons[l*MASHA+i]), "clicked",
              G_CALLBACK (callback), (gpointer) (l*MASHA+i));
          GG(buttons[l*MASHA+i], M[l*MASHA+1]);

          gtk_widget_show(buttons[l*MASHA+i]);
      }
      gtk_widget_show (lines[l]);
  }
  // button = gtk_button_new_with_label ("Кнопка 1");

  //gtk_widget_show (button);
  gtk_widget_show (box1);
  gtk_widget_show (window);
  gtk_main ();
  
  return 0;
}




Понатырила откуда могла, вроде все работает. Помогите...
...
Рейтинг: 0 / 0
Помогите с GTK... фигня не понятная...
    #38575687
Фотография Mash6a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и как создать событие по нажатию кнопи в этом долбаном ГТК ?
...
Рейтинг: 0 / 0
Помогите с GTK... фигня не понятная...
    #38575892
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То что тебе нужно это GtkToggleButton. И при создании кнопок просто задаешь цвета для различных GTK_STATE_.
Ну а дальше просто gtk_toggle_button_set_active() и все.
...
Рейтинг: 0 / 0
Помогите с GTK... фигня не понятная...
    #38575916
Фотография Mash6a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.gtk.org/api/2.6/gtk/GtkToggleButton.html
только тут нашла про tunggle button ничего не понимаю, GTK дурацкии. Попыталась вставить в свой код он ругается возмущается и виснет...
...
Рейтинг: 0 / 0
Помогите с GTK... фигня не понятная...
    #38586030
Фотография Mash6a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приведите пример задания цвета кнопке... Пожалуйста
...
Рейтинг: 0 / 0
Помогите с GTK... фигня не понятная...
    #38586710
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mash6aПопыталась вставить в свой код он ругается возмущается и виснет...
Разработчик должен уметь разбираться в сути проблемы. Зависание это обычно
либо зацикливание твоего кода, либо бесконечный таймаут на каком-то вызове
библиотеки или OS API.

Если ты не можешь разобрать проблему хотя-бы до уровня идентификации ГДЕ
виснет или ЧТО циклиться то наверное тебе не стоит заниматься программированием
вообще.

Это так-же как и не стоит заниматься спортом человеку который боится нагрузок
или синяков и ушибов.
...
Рейтинг: 0 / 0
Помогите с GTK... фигня не понятная...
    #38586965
Фотография Mash6a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, ну ты че прикалываешься ? Я не помню чтобы спрашивала надо мне заниматься или нет, я попросила помощи в том что не шарю. а в связи с тем что это будет одноразово, я прошу помочь мне только в круге моей программы.
...
Рейтинг: 0 / 0
Помогите с GTK... фигня не понятная...
    #38586993
Фотография Mash6a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скиньте пожалуйста хоть какую-нибудь программку на ГТК без загонов, и не очень простую что-нибудь путевое... Ну пожалуйста...
...
Рейтинг: 0 / 0
Помогите с GTK... фигня не понятная...
    #38586996
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если ты до сих пор не смогла решить такую примитивную задачку, то точно ЭТИМ тебе заниматься не нужно.

Ладно, объясняю для не умеющих думать:
Кнопка это не просто GtkWidget, а контейнер с GtkLabel внутри. Если прочитать название функции gtk_button_new_with_label() об этом можно догадаться. Об этом можно догадаться даже просто подумав как проще всего нарисовать кнопку: рамка а внутри текст, как проще всего нарисовать текст?
То-же самое можно и доподлинно узнать открыв документацию на GtkButton: https://developer.gnome.org/gtk2/stable/GtkButton.html и прочитав секцию Description
https://developer.gnome.org/gtk2/stable/GtkButton.html#GtkButton.description The GtkButton widget can hold any valid child widget. That is it can hold most any other standard GtkWidget. The most commonly used child is the GtkLabel.


А после того как ты догадаешься что твой "X" на кнопке отрисовывается через GtkLabel лежащий в контейнере которым является GtkButton, то в той самой документации, в разделе Object Hierarchy ты сможешь узнать как конкретно называется контейнер от которого унаследована кнопка. А открыв документацию на этот контейнер увидеть один единственный метод: gtk_bin_get_child()

А дальше уже вообще элементарно:
Вместо твоего
Код: plaintext
1.
	gtk_widget_modify_bg ( GTK_WIDGET(btn), GTK_STATE_NORMAL, &color);

пишешь:
Код: plaintext
1.
2.
	GtkWidget *label = gtk_bin_get_child(btn);
	gtk_widget_modify_bg(label, GTK_STATE_NORMAL, &color);


И все.
...
Рейтинг: 0 / 0
Помогите с GTK... фигня не понятная...
    #38587952
Фотография Mash6a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поменяла, выдает ошибку в этой строчке, скрин попозже кину.
...
Рейтинг: 0 / 0
Помогите с GTK... фигня не понятная...
    #38588060
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlЕсли ты до сих пор не смогла решить такую примитивную задачку, то точно ЭТИМ тебе заниматься не нужно.

Ладно, объясняю для не умеющих думать:
Кнопка это не просто GtkWidget, а контейнер с GtkLabel внутри. Если прочитать название функции gtk_button_new_with_label() об этом можно догадаться. Об этом можно догадаться даже просто подумав как проще всего нарисовать кнопку: рамка а внутри текст, как проще всего нарисовать текст?
То-же самое можно и доподлинно узнать открыв документацию на GtkButton: https://developer.gnome.org/gtk2/stable/GtkButton.html и прочитав секцию Description
https://developer.gnome.org/gtk2/stable/GtkButton.html#GtkButton.description The GtkButton widget can hold any valid child widget. That is it can hold most any other standard GtkWidget. The most commonly used child is the GtkLabel.


А после того как ты догадаешься что твой "X" на кнопке отрисовывается через GtkLabel лежащий в контейнере которым является GtkButton, то в той самой документации, в разделе Object Hierarchy ты сможешь узнать как конкретно называется контейнер от которого унаследована кнопка. А открыв документацию на этот контейнер увидеть один единственный метод: gtk_bin_get_child()

А дальше уже вообще элементарно:
Вместо твоего
Код: plaintext
1.
	gtk_widget_modify_bg ( GTK_WIDGET(btn), GTK_STATE_NORMAL, &color);

пишешь:
Код: plaintext
1.
2.
	GtkWidget *label = gtk_bin_get_child(btn);
	gtk_widget_modify_bg(label, GTK_STATE_NORMAL, &color);


И все.

Круть :) Но или я чего не понял (что Вам казалось очевидным) или тут чего-то не хватает )). Мне то ровно параллельно, но просто на досуге решил попробовать что выйдет... Не вышло ровно ничего :) кнопка не отреагировала никак. на _fg реагирует... а на _bg - никак :)
...
Рейтинг: 0 / 0
Помогите с GTK... фигня не понятная...
    #38588296
Фотография Mash6a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ок, я сегодня попробую _fg
...
Рейтинг: 0 / 0
Помогите с GTK... фигня не понятная...
    #38602917
Фотография Mash6a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нифига не получается. Я тупая...
...
Рейтинг: 0 / 0
Помогите с GTK... фигня не понятная...
    #38605107
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начни с простого.
...
Рейтинг: 0 / 0
Помогите с GTK... фигня не понятная...
    #38606028
Фотография Mash6a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну пожалуйста скиньте кто-нибудь что-нибудь, кому что не нужно. Мне уже можно любую законченную программу на GTK вообще любую .пожалуйста!
...
Рейтинг: 0 / 0
Помогите с GTK... фигня не понятная...
    #38606206
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mash6a,
git clone git://git.gnome.org/gnome-calculator
...
Рейтинг: 0 / 0
Помогите с GTK... фигня не понятная...
    #38607121
Фотография Mash6a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что это и как этим воспользоваться ?
...
Рейтинг: 0 / 0
Помогите с GTK... фигня не понятная...
    #38607307
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mash6a, заходишь по этой ссылке
https://git.gnome.org/browse/gnome-calculator

и качаешь исходники калькулятора для Гномов.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Помогите с GTK... фигня не понятная...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]