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

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

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

GtkWidget

Β +---- GtkEntry

Β Β Β Β Β Β Β Β +----Β GtkSpinButton

И снова API понятСн, ΠΈ ΠΌΡ‹ пСрСчислим Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто примСняСмыС Π²Ρ‹Π·ΠΎΠ²Ρ‹:

<b>GtkWidget* gtk_spin_button_new(GtkAdjustment *adjustment,</b>

<b>Β gdouble climb_rate, guint digits);</b>

<b>GtkWidget* gtk_spin_button_new_with_range(gdouble min, gdouble max,</b>

<b>Β gdouble step);</b>

<b>void gtk_spin_button_set_digits(GtkSpinButton *spin_button, guint digits);</b>

<b>void gtk_spin_button_set_increments(GtkSpinButton *spin_button,</b>

<b>Β gdouble step, gdouble page);</b>

<b>void gtk_spin_button_set_range(GtkSpinButton *spin_button, gdouble min,</b>

<b>Β gdouble max);</b>

<b>gdouble gtk_spin_button_get_value(GtkSpinButton *spin_button);</b>

<b>gint gtk_spin_button_get_value_as_int(GtkSpinButton *spin_button);</b>

<b>void gtk_spin_button_set_value(GtkSpinButton *spin button, gdouble value);</b>

Для создания Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°

GtkSpinButton
с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
gtk_spin_button_new
Π²Ρ‹ сначала Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
GtkAdjustment
. Π’ΠΈΠ΄ΠΆΠ΅Ρ‚
GtkAdjustment
β€” это абстрактный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, содСрТащий Π»ΠΎΠ³ΠΈΠΊΡƒ, ΠΊΠ°ΡΠ°ΡŽΡ‰ΡƒΡŽΡΡ управлСния значСниями с ограничСниями. Он Ρ‚Π°ΠΊΠΆΠ΅ примСняСтся ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°Ρ…, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ
GtkHScale
ΠΈ
GtkVScale
.

Для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ°

GtkAdjustment
ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ниТнюю ΠΈ Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ приращСния.

<b>GtkObject* gtk_adjustment_new(gdouble value, gdouble lower,</b>

<b>Β gdouble upper, gdouble step_increment,</b>

<b>Β gdouble page_increment, gdouble page_size);</b>

ЗначСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

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 &lt;gtk/gtk.h&gt;

void closeApp(GtkWidget *window, gpointer data) {

Β gtk_main_quit();

}

int main(int argc, char *argv[]) {

Β GtkWidget* window;

Β GtkWidget *spinbutton;

Β GtkObject *adjustment;

Β gtk_init(&amp;argc, &amp;argv);

Β window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

Β gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);

Β g_signal_connect(GTK_OBJECT(window), &quot;destroy&quot;,

Β  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).

ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π² Linux - image059.jpg

Рис. 16.9 

GtkButton

Π’Ρ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ ΠΊΠ½ΠΎΠΏΠΊΠΈ

GtkButton
Π² дСйствии, Π½ΠΎ сущСствуСт нСсколько Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ², ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ²
GtkButton
, с Ρ‡ΡƒΡ‚ΡŒ большими Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ возмоТностями, Π·Π°ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌΠΈ упоминания.

GtkButton

Β +----GtkToggleButton

Β Β Β Β Β  Β +----GtkCheckButton

Β Β Β Β Β Β Β Β Β Β Β Β Β +----GtkRadioButton

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ², ΠΊΠ½ΠΎΠΏΠΊΠ°-ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ Ρ‚ΠΈΠΏΠ°

GtkToggleButton
β€” прямой ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ ΠΊΠ½ΠΎΠΏΠΊΠΈ
GtkButton
, ΠΊΠ½ΠΎΠΏΠΊΠ°-Ρ„Π»Π°ΠΆΠΎΠΊ
GtkCheckButton
β€” ΠΊΠ½ΠΎΠΏΠΊΠΈ-Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Ρ
GtkToggleButton
ΠΈ Ρ‚ΠΎ ΠΆΠ΅ самоС для ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Ρ
GtkRadioButton
, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡.

GtkToggleButton

Π’ΠΈΠ΄ΠΆΠ΅Ρ‚

GtkToggleButton
ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρƒ
GtkButton
Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠΉ Π²Π°ΠΆΠ½ΠΎΠΉ Π΄Π΅Ρ‚Π°Π»ΠΈ:
GtkToggleButton
ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ состояниСм. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ°-Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΈΠ»ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Π°. Когда ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Ρ‰Π΅Π»ΠΊΠ°Π΅Ρ‚ ΠΌΡ‹ΡˆΡŒΡŽ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚
GtkToggleButton
, послСдний стандартным способом ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ сигнал
clicked
ΠΈ измСняСт (ΠΈΠ»ΠΈ "ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚") своС состояниС.