2016-04-22 6 views
-1

Пожалуйста, помогите мне создать массив кнопок. Это то, что я сделал до сих пор, но я считаю, что я делаю что-то неправильно, потому что моя программа не работает так, как должна.Создание массива кнопок

/*array is here*/ 
GtkWidget *button[2]; 
int i; 
for (i=0; i<2; i++) 
{ 
    button[i]=gtk_button_new(); 
} 

button[0] = gtk_button_new_with_label ("Run shellscript"); 

g_signal_connect (button[0], "clicked", 
     G_CALLBACK (callback), "shellscript"); 

gtk_box_pack_start (GTK_BOX (box1), button[0], TRUE, TRUE, 0); 

gtk_widget_show(button[0]); 

button[1] = gtk_button_new_with_label ("Run program2 "); 

g_signal_connect (button[1], "clicked", 
     G_CALLBACK (callback), "program2"); 

gtk_box_pack_start (GTK_BOX (box1), button[1], TRUE, TRUE, 0); 

gtk_widget_show(button[1]); 
+1

И _how_ должен ли он работать? И как _does_ он работает? –

+0

Ну в основном это не работает вообще, причина в массиве, потому что когда я только что использовал gtkWidget * button1; GtkWidget * button2; все работает ,,, теперь это не с массивом –

+3

Пожалуйста, напишите [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) и попытайтесь лучше отложить код, который вы ввели в свой вопрос , – jdarthenay

ответ

0

Есть несколько проблем:

Ваш цикл не имеет смысла, так как ваше создание кнопок вручную после этого, и создает утечку памяти. Удалите весь блок.

Из вашего другого образца кода, я вижу, что вы не вызываете gtk_widget_show_all в своем верхнем окне. Он работает как gtk_widget_show, за исключением того, что он рекурсивный, и отобразит виджет и все его дочерние элементы.

Я мог бы попробовать ваш образец кода с этими двумя модификациями. Однако ошибка Xrandr полностью не связана и относится к вашей среде. Убедитесь, что вы можете запустить другое приложение GTK без проблем (например, gtk-demo, установленный с GTK).

Смежные вопросы