Можно ли обновить панель кнопок с несколькими кнопками, когда реализовано определенное действие, такое как «Отправить» и «Удалить»? При отправке должна быть добавлена новая кнопка, а при удалении (после выбора кнопки) кнопка должна быть уничтожена (не скрыта). Графический интерфейс разработан с использованием Glade в Gtk-2, а код написан на языке C.
Окно кнопки обновления в графическом интерфейсе Gtk
Ответы (2)
Используйте gtk_box_pack_start()
или ...pack_end()
или любой другой связанный метод, чтобы добавить кнопку в поле. Используйте gtk_widget_destroy()
на кнопке, чтобы вынуть ее из контейнера и одновременно уничтожить.
person
ptomato
schedule
03.09.2015
Я создал их с помощью [gtk_box_pack_start()] в цикле. Но мне нужно обновить поле кнопок. Как [gtk_widget_destroy()] уничтожит все существующие кнопки и снова создаст их с новыми??? Для одиночной отправки это не проблема, но когда я добавляю несколько кнопок, я сталкиваюсь с этой проблемой и при удалении одной кнопки.
- person djgharphalia07; 04.09.2015
Спасибо за ваше время, сэр, новый.
- person djgharphalia07; 04.09.2015
Я получил свой ответ. В цикле for вместо создания кнопок из i=0 я взял новую переменную int, которая содержит общее количество уже существующих кнопок, и теперь она создает только новые те.
void Buttons()
{
int i, totalrecord=0;
int prevtotalbutton;
for (i = prevtotalbutton ; i <totalrecord; i++)
{
ButtonfromArray = gtk_button_new_with_label (array);
gtk_box_pack_start(GTK_BOX(VBbox), ButtonfromArray, FALSE, TRUE, 1);
gtk_signal_connect (GTK_OBJECT (ButtonfromArray), "clicked", GTK_SIGNAL_FUNC (ButtonsCreated), VBbox);
gtk_widget_show (ButtonfromArray);
}
prevtotalbutton=totalrecord;
}
Обновление блока кнопок здесь немного сложнее. Этот трюк действительно работал и без использования каких-либо новых функций, чтобы сделать destroy и все.
С этой проблемой сталкивается большинство из нас. Надеюсь, мой ответ поможет многим, как я.
person
djgharphalia07
schedule
04.09.2015