Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π² LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 288

Автор ΠœΡΡ‚ΡŒΡŽ НСйл

API Ρƒ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°

GtkToggleButton
ΠΎΡ‡Π΅Π½ΡŒ простой:

<b>GtkWidget* gtk_toggle_button_new(void);</b>

<b>GtkWidget* gtk_toggle_button_new_with_label(const gchar* label);</b>

<b>gboolean gtk_toggle_button_get_active(GtkToggleButton *toggle_button);</b>

<b>void gtk_toggle_button_set_active(GtkToggleButton *toggle_button,</b>

<b>Β gboolean is_active);</b>

НаиболСС интСрСсныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€”

gtk_toggle_button_get_active
ΠΈ
gtk_toggle_button_set_active
, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ для чтСния ΠΈ установки состояния ΠΊΠ½ΠΎΠΏΠΊΠΈ-Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Ρ. Если характСристика функционирования Ρ€Π°Π²Π½Π°
TRUE
, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ°-Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ
GtkToggleButton
Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π°.

GtkCheckButton

Кнопка-Ρ„Π»Π°ΠΆΠΎΠΊ

GtkCheckButton
β€” это замаскированная ΠΊΠ½ΠΎΠΏΠΊΠ°-Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ
GtkToggleButton
. ВмСсто скучного ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ отобраТСния
GtkToggleButton
ΠΊΠ½ΠΎΠΏΠΊΠ°
GtkCheckButton
выводится ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π»Π°ΠΆΠΎΠΊ с располоТСнным рядом тСкстом. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ Π½Π΅Ρ‚.

<b>GtkWidget* gtk_check_button_new(void);</b>

<b>GtkWidget* gtk_check_button_new_with_label(const gchar *label);</b>

GtkRadioButton

Π­Ρ‚Π° ΠΊΠ½ΠΎΠΏΠΊΠ° Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ отличаСтся ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ…, Ρ‚.ΠΊ. ΠΌΠΎΠΆΠ΅Ρ‚ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ°. ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ (ΠΈΠ»ΠΈ Ρ€Π°Π΄ΠΈΠΎΠΊΠ½ΠΎΠΏΠΊΠ°)

GtkRadioButton
β€” ΠΎΠ΄Π½Π° ΠΈΠ· Ρ‚Π΅Ρ… ΠΊΠ½ΠΎΠΏΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΈΠ· Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ…. Имя заимствовано Ρƒ старых Ρ€Π°Π΄ΠΈΠΎΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠΎΠ² с мСханичСскими ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ выскакивали с трСском, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡΡΡŒ Π² ΠΏΡ€Π΅ΠΆΠ½Π΅Π΅ состояниС, ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ.

<b>GtkWidget* gtk_radio_button_new(GSList *group);</b>

<b>GtkWidget* gtk_radio_button_new_from_widget(GtkRadioButton *group);</b>

<b>GtkWidget* gtk_radio_button_new_with_label(GSList *group, const gchar *label);</b>

<b>void gtk_radio_button_set_group(GtkRadioButton *radio_button, GSList *group);</b>

<b>GSList* gtk_radio_button_get_group(GtkRadioButton *radio_button);</b>

Π“Ρ€ΡƒΠΏΠΏΠ° ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ прСдставлСна Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅-спискС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ 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 &lt;gtk/gtk.h&gt;

#include &lt;stdio.h&gt;

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(&quot;%s is %s\n&quot;, button_name, active?&quot;active&quot;:&quot;not active&quot;);

}

void button_clicked(GtkWidget *button, gpointer data) {

Β print_active(&quot;Checkbutton&quot;, GTK_TOGGLE_BUTTON(checkbutton));

Β print_active(&quot;Togglebutton&quot;, GTK_TOGGLE_BUTTON(togglebutton));

Β print_active(&quot;Radiobutton1&quot;, GTK_TOGGLE_BUTTON(radiobutton1));

Β print_active(&quot;Radiobutton2&quot;, GTK_TOGGLE_BUTTON(radiobutton2));

Β printf(&quot;\n&quot;);

}

4.Β Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

main
Π²Ρ‹ создаСтС Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ ΠΊΠ½ΠΎΠΏΠΎΠΊ, ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚Π΅ ΠΈΡ… Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€
GtkVBox
, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΏΠΎΡΡΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΊΠΈ, ΠΈ связываСтС сигнал ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° с ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ OK:

gint main(gint argc, gchar *argv[]) {

Β GtkWidget* window;

Β GtkWidget *button;