ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΈΠΏΠ° GtkAdjustment ΠΏΠ΅ΡΠ΅Π΄Π°ΠΉΡΠ΅ Π² ΡΡΠ½ΠΊΡΠΈΡ Π½ΠΈΠΆΠ½ΡΡ ΠΈ Π²Π΅ΡΡ Π½ΡΡ Π³ΡΠ°Π½ΠΈΡΡ ΠΈ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΠΈΡΠ°ΡΠ΅Π½ΠΈΡ.
GtkObject* gtk_adjustment_new(gdouble value, gdouble lower,
gdouble upper, gdouble step_increment,
gdouble page_increment, gdouble page_size);
ΠΠ½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² step_increment ΠΈ page_increment Π·Π°Π΄Π°ΡΡ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΡΠ°ΡΠ΅Π½ΠΈΠΉ, Π ΡΠ»ΡΡΠ°Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ-ΡΡΠ΅ΡΡΠΈΠΊΠ° GtkSpinButton ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ step_increment ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΡΠ΅Π»ΡΠΊΠ΅ ΠΌΡΡΡΡ ΡΡΡΠ΅Π»ΠΊΠΈ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ page_increment ΠΈ page_size Π² Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°Ρ GtkSpinButton Π½Π΅ Π²Π°ΠΆΠ½Ρ.
ΠΡΠΎΡΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, climb_rate, ΡΡΠ½ΠΊΡΠΈΠΈ gtk_spin_button_new ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΊΠΎΡΠΎΡΡΡΡ ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΈ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°Π½ΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΡΠΎ ΡΡΡΠ΅Π»ΠΊΠΎΠΉ. Π Π½Π°ΠΊΠΎΠ½Π΅Ρ, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ digits Π·Π°Π΄Π°Π΅Ρ ΡΠΎΡΠ½ΠΎΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠΈΡΠ»ΠΎΠ²ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°, Π΅ΡΠ»ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, digits ΡΠ°Π²Π΅Π½ 3, ΠΊΠ½ΠΎΠΏΠΊΠ°-ΡΡΠ΅ΡΡΠΈΠΊ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡ 0.00.
Π€ΡΠ½ΠΊΡΠΈΡ gtk_spin_button_new_with_range β ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° GtkAdjustment. ΠΡΠΎΡΡΠΎ Π·Π°Π΄Π°ΠΉΡΠ΅ Π½ΠΈΠΆΠ½ΡΡ ΠΈ Π²Π΅ΡΡ Π½ΡΡ Π³ΡΠ°Π½ΠΈΡΡ ΠΈ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ ΠΏΡΠΈΡΠ°ΡΠ΅Π½ΠΈΡ.
ΠΡΠΎΡΠ΅ΡΡΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠ΅Π½Ρ Π»Π΅Π³ΠΊΠΎ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ gtk_spin_button_getvalue, Π° Π΅ΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΡ gtk_spin_button_get_value_as_int.
ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 16.5.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 16.5. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° GtkSpinButtonΠ‘Π΅ΠΉΡΠ°Ρ ΠΌΡ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π² ΠΊΠΎΡΠΎΡΠΊΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, ΠΊΠ°ΠΊ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΠΊΠ½ΠΎΠΏΠΊΠ°-ΡΡΠ΅ΡΡΠΈΠΊ GtkSpinButton. ΠΠ°Π·ΠΎΠ²ΠΈΡΠ΅ ΡΠ°ΠΉΠ» spin.Ρ.
#include <gtk/gtk.h>
void closeApp(GtkWidget *window, gpointer data) {
gtk_main_quit();
}
int main(int argc, char *argv[]) {
GtkWidget* window;
GtkWidget *spinbutton;
GtkObject *adjustment;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);
g_signal_connect(GTK_OBJECT(window), "destroy",
GTK_SIGNAL_FUNC(closeApp), NULL);
adjustment = gtk_adjustment_new(100.0, 50.0, 150.0, 0.5, 0.05, 0.05);
spinbutton = gtk_spin_button_new(GTK_ADJUSTMENT(adjustment), 0.01, 2);
gtk_container_add(GTK_CONTAINER(window), spinbutton);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
ΠΠΎΠ³Π΄Π° Π²Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ-ΡΡΠ΅ΡΡΠΈΠΊ, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ 50β150 (ΡΠΈΡ. 16.9).
Π ΠΈΡ. 16.9
GtkButton
ΠΡ ΡΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ ΠΊΠ½ΠΎΠΏΠΊΠΈ GtkButton Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ, Π½ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ², ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ² GtkButton, Ρ ΡΡΡΡ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ, Π·Π°ΡΠ»ΡΠΆΠΈΠ²Π°ΡΡΠΈΠΌΠΈ ΡΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΡ.
GtkButton
+----GtkToggleButton
+----GtkCheckButton
+----GtkRadioButton
ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ², ΠΊΠ½ΠΎΠΏΠΊΠ°-ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»Ρ ΡΠΈΠΏΠ° GtkToggleButton β ΠΏΡΡΠΌΠΎΠΉ ΠΏΠΎΡΠΎΠΌΠΎΠΊ ΠΊΠ½ΠΎΠΏΠΊΠΈ GtkButton, ΠΊΠ½ΠΎΠΏΠΊΠ°-ΡΠ»Π°ΠΆΠΎΠΊ GtkCheckButton β ΠΊΠ½ΠΎΠΏΠΊΠΈ-Π²ΡΠΊΠ»ΡΡΠ°ΡΠ΅Π»Ρ GtkToggleButton ΠΈ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»Ρ GtkRadioButton, ΠΏΡΠΈΡΠ΅ΠΌ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π·Π°Π΄Π°Ρ.
GtkToggleButtonΠΠΈΠ΄ΠΆΠ΅Ρ GtkToggleButton ΠΈΠ΄Π΅Π½ΡΠΈΡΠ΅Π½ Π²ΠΈΠ΄ΠΆΠ΅ΡΡ GtkButton Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠΉ Π²Π°ΠΆΠ½ΠΎΠΉ Π΄Π΅ΡΠ°Π»ΠΈ: GtkToggleButton ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ°-Π²ΡΠΊΠ»ΡΡΠ°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½Π° ΠΈΠ»ΠΈ Π²ΡΠΊΠ»ΡΡΠ΅Π½Π°. ΠΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ΅Π»ΠΊΠ°Π΅Ρ ΠΌΡΡΡΡ Π²ΠΈΠ΄ΠΆΠ΅Ρ GtkToggleButton, ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅Ρ ΡΠΈΠ³Π½Π°Π» clicked ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ (ΠΈΠ»ΠΈ "ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅Ρ") ΡΠ²ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅.
API Ρ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° GtkToggleButton ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎΠΉ:
GtkWidget* gtk_toggle_button_new(void);
GtkWidget* gtk_toggle_button_new_with_label(const gchar* label);
gboolean gtk_toggle_button_get_active(GtkToggleButton *toggle_button);
void gtk_toggle_button_set_active(GtkToggleButton *toggle_button,
gboolean is_active);
ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ β gtk_toggle_button_get_active ΠΈ gtk_toggle_button_set_active, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΡΠ΅ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ-Π²ΡΠΊΠ»ΡΡΠ°ΡΠ΅Π»Ρ. ΠΡΠ»ΠΈ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π²Π½Π° TRUE, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ°-Π²ΡΠΊΠ»ΡΡΠ°ΡΠ΅Π»Ρ GtkToggleButton Π²ΠΊΠ»ΡΡΠ΅Π½Π°.
GtkCheckButtonΠΠ½ΠΎΠΏΠΊΠ°-ΡΠ»Π°ΠΆΠΎΠΊ GtkCheckButton β ΡΡΠΎ Π·Π°ΠΌΠ°ΡΠΊΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΠΊΠ½ΠΎΠΏΠΊΠ°-Π²ΡΠΊΠ»ΡΡΠ°ΡΠ΅Π»Ρ GtkToggleButton. ΠΠΌΠ΅ΡΡΠΎ ΡΠΊΡΡΠ½ΠΎΠ³ΠΎ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ GtkToggleButton ΠΊΠ½ΠΎΠΏΠΊΠ° GtkCheckButton Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊΠ°ΠΊ ΠΏΡΠΈΠ²Π»Π΅ΠΊΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ»Π°ΠΆΠΎΠΊ Ρ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΌ ΡΡΠ΄ΠΎΠΌ ΡΠ΅ΠΊΡΡΠΎΠΌ. Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΡΠ°Π·Π»ΠΈΡΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ Π½Π΅Ρ.
GtkWidget* gtk_check_button_new(void);
GtkWidget* gtk_check_button_new_with_label(const gchar *label);
GtkRadioButtonΠΡΠ° ΠΊΠ½ΠΎΠΏΠΊΠ° Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ , Ρ.ΠΊ. ΠΌΠΎΠΆΠ΅Ρ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°ΡΡΡΡ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠΈΠΏΠ°. ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»Ρ (ΠΈΠ»ΠΈ ΡΠ°Π΄ΠΈΠΎΠΊΠ½ΠΎΠΏΠΊΠ°) GtkRadioButton β ΠΎΠ΄Π½Π° ΠΈΠ· ΡΠ΅Ρ ΠΊΠ½ΠΎΠΏΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π²ΡΠ±ΠΈΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΠ· Π³ΡΡΠΏΠΏΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΡΡ . ΠΠΌΡ Π·Π°ΠΈΠΌΡΡΠ²ΠΎΠ²Π°Π½ΠΎ Ρ ΡΡΠ°ΡΡΡ ΡΠ°Π΄ΠΈΠΎΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠΎΠ² Ρ ΠΌΠ΅Ρ Π°Π½ΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΡΠΊΠ°ΠΊΠΈΠ²Π°Π»ΠΈ Ρ ΡΡΠ΅ΡΠΊΠΎΠΌ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡ Π² ΠΏΡΠ΅ΠΆΠ½Π΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ.
GtkWidget* gtk_radio_button_new(GSList *group);
GtkWidget* gtk_radio_button_new_from_widget(GtkRadioButton *group);
GtkWidget* gtk_radio_button_new_with_label(GSList *group, const gchar *label);
void gtk_radio_button_set_group(GtkRadioButton *radio_button, GSList *group);
GSList* gtk_radio_button_get_group(GtkRadioButton *radio_button);
ΠΡΡΠΏΠΏΠ° ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»Π΅ΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ΅-ΡΠΏΠΈΡΠΊΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ GLib, Π½Π°Π·Π²Π°Π½Π½ΠΎΠΌ GSList. ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»ΠΈ Π² Π³ΡΡΠΏΠΏΡ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ GSList ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅ΠΌΡ ΠΊΠ°ΠΆΠ΄ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ gtk_radio_button_new ΠΈ gtk_radio_button_get_group, Π΅ΡΡΡ ΠΈ Π±ΠΎΠ»Π΅Π΅ Π»Π΅Π³ΠΊΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± Π² Π²ΠΈΠ΄Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ gtk_radio_button_new_with_widget, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² GSList ΡΡΡΠ΅ΡΡΠ²ΡΡΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ. ΠΡ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ Π΅Π΅ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ Π² ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠΈ 16.6, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π²Π°ΠΌ ΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΡΠ°Π·Π½ΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ GtkButton.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 16.6. GtkCheckButton, GtkToggleButton ΠΈ GtkRadioButtonΠΠ²Π΅Π΄ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ΅ΠΊΡΡ Π² ΡΠ°ΠΉΠ» Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ buttons.Ρ.
1. Π‘Π½Π°ΡΠ°Π»Π° ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΊΠ°ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅:
#include <gtk/gtk.h>
#include <stdio.h>
GtkWidget *togglebutton;
GtkWidget *checkbutton;
GtkWidget *radiobutton1, *radiobutton2;
void closeApp(GtkWidget *window, gpointer data) {
gtk_main_quit();
}
2. ΠΠ°Π»Π΅Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅Ρ GtkWidget ΠΈ GtkLabel Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ GtkHbox ΠΈ Π·Π°ΡΠ΅ΠΌ Π²ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠΎΡ GtkHbox Π² Π·Π°Π΄Π°Π½Π½ΡΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ- ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ. ΠΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΠΉΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄:
void add_widget_with_label(GtkContainer * box, gchar * caption,
GtkWidget * widget) {
GtkWidget *label = gtk_label_new(caption);
GtkWidget *hbox = gtk_hbox_new(TRUE, 4);
gtk_container_add(GTK_CONTAINER(hbox), label);
gtk_container_add(GTK_CONTAINER(hbox), widget);
gtk_container_add(box, hbox);
}
3. print_active β Π΅ΡΠ΅ ΠΎΠ΄Π½Π° Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ-Π²ΡΠΊΠ»ΡΡΠ°ΡΠ΅Π»Ρ GtkToggleButton ΡΠΎ ΡΡΡΠΎΠΊΠΎΠΉ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ. ΠΠ½ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ button_clicked, ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΉ Ρ ΡΠΈΠ³Π½Π°Π»ΠΎΠΌ clicked ΠΊΠ½ΠΎΠΏΠΊΠΈ OK. ΠΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ΅Π»ΡΠΊΠ΅ ΠΌΡΡΡΡ ΡΡΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π²Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΠΎΡΡΠ΅Ρ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ:
void print_active(char * button_name, GtkToggleButton* button) {
gboolean active = gtk_toggle_button_get_active(button);
printf("%s is %s\n", button_name, active?"active":"not active");
}
void button_clicked(GtkWidget *button, gpointer data) {
print_active("Checkbutton", GTK_TOGGLE_BUTTON(checkbutton));
print_active("Togglebutton", GTK_TOGGLE_BUTTON(togglebutton));
print_active("Radiobutton1", GTK_TOGGLE_BUTTON(radiobutton1));
print_active("Radiobutton2", GTK_TOGGLE_BUTTON(radiobutton2));
printf("\n");
}
4. Π ΡΡΠ½ΠΊΡΠΈΠΈ main Π²Ρ ΡΠΎΠ·Π΄Π°Π΅ΡΠ΅ Π²ΠΈΠ΄ΠΆΠ΅ΡΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ, ΠΏΠΎΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΠ΅ ΠΈΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ GtkVBox, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΏΠΎΡΡΠ½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΊΠΈ, ΠΈ ΡΠ²ΡΠ·ΡΠ²Π°Π΅ΡΠ΅ ΡΠΈΠ³Π½Π°Π» ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° Ρ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ OK:
gint main(gint argc, gchar *argv[]) {
GtkWidget* window;
GtkWidget *button;
GtkWidget *vbox;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);
g_signal_connect(GTK_OBJECT(window), "destroy",
GTK_SIGNAL_FUNC(closeApp), NULL);
button = gtk_button_new_with_label("Ok");
togglebutton = gtk_toggle_button_new_with_label("Toggle");
checkbutton = gtk_check_button_new();
radiobutton1 = gtk_radio_button_new(NULL);
radiobutton2 =
gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(radiobutton1));
vbox = gtk_vbox_new(TRUE, 4);
add_widget_with_label(GTK_CONTAINER(vbox), "ToggleButton:",
togglebutton);
add_widget_with_label(GTK_CONTAINER(vbox), "CheckButton:",
checkbutton);
add_widget_with_label(GTK_CONTAINER(vbox), "Radio 1:", radiobutton1);
add_widget_with_label(GTK_CONTAINER(vbox), "Radio 2:", radiobutton2);
add_widget_with_label(GTK_CONTAINER(vbox), "Button:", button);
g_signal_connect(GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(button_clicked), NULL);
gtk_container_add(GTK_CONTAINER(window), vbox);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
ΠΠ° ΡΠΈΡ. 16.10 ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° buttons.c Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ Ρ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°ΠΌΠΈ GtkButton ΡΠ΅ΡΡΡΠ΅Ρ ΡΠ°ΡΡΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ ΡΠΈΠΏΠΎΠ².