c - 我很难使用 GTK 来绘制文本
问题描述
我尝试键入此代码以在屏幕上显示文本,但是当我编译然后打开已编译的应用程序时没有文本。为什么这行不通?我正在使用 C 和 Linux,我正在尝试使用 gtk 头文件。我究竟做错了什么?
#include <stdlib.h>
#include <gtk/gtk.h>
static void helloWorld (GtkWidget *wid, GtkWidget *win) {
GtkWidget *dialog = NULL;
dialog = gtk_message_dialog_new (GTK_WINDOW (win), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, "Hello World! My name is ****");
gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
}
int main (int argc, char *argv[]) {
GtkWidget *button = NULL;
GtkWidget *win = NULL;
GtkWidget *vbox = NULL;
/* Initialize GTK+ */
g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, (GLogFunc) gtk_false, NULL);
gtk_init (&argc, &argv);
g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, g_log_default_handler, NULL);
/* Create the main window */
win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW (win), 400, 300);
gtk_container_set_border_width (GTK_CONTAINER (win), 8);
gtk_window_set_title (GTK_WINDOW (win), "The stupid GTK test");
gtk_window_set_position (GTK_WINDOW (win), GTK_WIN_POS_CENTER);
gtk_widget_realize (win);
g_signal_connect (win, "destroy", gtk_main_quit, NULL);
/* Create a vertical box with buttons*/
vbox = gtk_vbox_new (TRUE, 6);
gtk_container_add (GTK_CONTAINER (win), vbox);
button = gtk_button_new_from_stock (GTK_STOCK_DIALOG_INFO);
g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (helloWorld), (gpointer) win);
gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
button = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
g_signal_connect (button, "clicked", gtk_main_quit, NULL);
gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
GtkWidget *view;
GtkTextBuffer *buffer;
GtkTextIter start, end;
PangoFontDescription *font_desc;
GdkColor color;
GtkTextTag *tag;
view = gtk_text_view_new ();
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
gtk_text_buffer_set_text (buffer, "Hello, this is some text", -1);
/* Change default font throughout the widget */
font_desc = pango_font_description_from_string ("Serif 15");
gtk_widget_modify_font (view, font_desc);
pango_font_description_free (font_desc);
/* Change default color throughout the widget */
gdk_color_parse ("green", &color);
gtk_widget_modify_text (view, GTK_STATE_NORMAL, &color);
/* Change left margin throughout the widget */
gtk_text_view_set_left_margin (GTK_TEXT_VIEW (view), 30);
/* Use a tag to change the color for just one part of the widget */
tag = gtk_text_buffer_create_tag (buffer, "blue_foreground",
"foreground", "blue", NULL);
gtk_text_buffer_get_iter_at_offset (buffer, &start, 7);
gtk_text_buffer_get_iter_at_offset (buffer, &end, 12);
gtk_text_buffer_apply_tag (buffer, tag, &start, &end);
/*Enter the main loop */
gtk_widget_show_all (win);
gtk_main ();
return 0;
}
我怎样才能使这项工作?我希望它在编译然后打开时显示文本。我尝试了几件事,但都没有工作。
解决方案
您忘记将文本框添加到窗口上的某个位置,它实际上会显示在那里,就像这样
gtk_box_pack_start (GTK_BOX (vbox), view, TRUE, TRUE, 0);
(必须在定义视图之后和调用 show_all 之前)。如果您查看您的代码,您会发现此调用是针对出现的所有其他小部件进行的。您的问题实际上并不特定于绘图文本。
推荐阅读
- c - 很少使用的功能,未使用会影响性能
- java - 使用数据库更新和 JMS 发布调用的 @Transactional 注释服务方法的单元测试,无需数据库连接或 JMS 提供程序
- excel - 选择 ComboBox 值并将它们放入相应的文本框中
- node.js - 如何在 Mac 上卸载 node js 版本
- django - 如何在引导程序中设置 django 样式?
- javascript - 如何在 ascx 文件上加粗菜单单击所选项目
- linux-kernel - devicetree and libgpiod with gpio-line-names - Issue
- python - Pygame中的蒙版碰撞
- css - 为什么输入文本后我的输入字段的背景颜色会发生变化?
- javascript - 应用色调旋转后计算十六进制?