Поля, панели, прокручиваемые окна и просмотр текста
GtkPaned
Это контейнеры, которые могут быть ориентированы вертикально или горизонтально, представляют собой два элемента, размер которых может изменяться. Размер этих двух элементов может быть изменен простым нажатием и перемещением разделяющей полосы между ними.
# #![allow(unused_variables)] #fn main() { let container = Paned::new(Orientation::Horizontal); let left_widget = ...; let right_widget = ...; container.pack1(&left_widget, true, true); container.pack2(&right_widget, true, true); #}
GtkEntry
Элементы позволяют пользовательскому интерфейсу принимать строку текста как входное значение, что может быть использовано другими виджетами для выполнения некоторых действий, используя данный текст как входные данные.
# #![allow(unused_variables)] #fn main() { let entry = Entry::new(); entry.set_text("Some Text"); if let Some(text) = entry.get_text() { println!("{}", text); } #}
GtkTextView
Текстовые панели нужны для двух вещей:
- способность показывать многострочный текст
- возможность пользователю вводить многострочный текст Текстовая панель может быть настроена так, что ее содержимое нельзя редактировать, если есть такая необходимость. Также есть возможность настраивать работу с переносами текста. Текстовые панели не умеют работать с форматированным текстом, однако вполне могут быть использованы как редактор кода. Если вы хотите, чтобы текст был показан в виде HTML, смотрите GtkWebView, если же вы хотите получить редактор кода, смотрите GtkSourceView.
Заметьте, что часто бывает лучше создать и привязать GtkTextBuffer к вашему текстовому полю вручную, чтобы получить указатель на буфер, который вы можете хранить, и избежать непрямого обращения, когда вы программируете ваш пользовательский интерфейс (UI). Имея указатель на буфер, можно легко получить доступ к тексту, который содержится в текстовой панели.
# #![allow(unused_variables)] #fn main() { // Буфер для текстовой панели с None в качестве параметра, потому что мы не // собираемся определять никаких текстовых тэгов для этого буфера. let text_buffer = TextBuffer::new(None); // После этого мы должны присвоить буфер новой текстовой панели, которая будет // самостоятельно обновлять себя при добавлении или удалении текста из буфера. let text_view = TextView::new_with_buffer(&text_buffer); #}
Извлечение текста из GtkTextBuffer требует некоторой сноровки, так что мы привели пример функции, которую вы можете использовать для того, чтобы получить содержимое буфера в виде строки (String). Вы можете указать определенный участок текста, который будет извлечен из буфера.
# #![allow(unused_variables)] #fn main() { /// Получить все содержимое буфера в строковом представлении. fn get_buffer(buffer: &TextBuffer) -> Option<String> { let start = buffer.get_start_iter(); let end = buffer.get_end_iter(); buffer.get_text(&start, &end, true) } #}
GtkScrolledWindow
Это одноэлементные контейнеры которые предоставляют прокручиваемые окна внутри них. Часто бывает удобным сочетать их вместе с текстовыми полями, которые возможно прокручивать. Это как раз то, что мы хотим сделать в этой главе.
# #![allow(unused_variables)] #fn main() { let scrolled_window = ScrolledWindow::new(None, None); scrolled_window.add(&text_view); #}