- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试将 .c 文件加载到 GtkSourceView
小部件中。
使用 C 语言,Gtk+ 2.22.1 和 Glade 3.6.7 以及 GtkSourceView 2.10.1。
我注意到在 Glade UI 中我只能配置一个 SourceView
来保存一个 TextBuffer
;我没有找到 SourceBuffer
组件。因此,我在 Glade 中创建了一个没有默认缓冲区的 SourceView
。现在我想将 SourceBuffer
设置为我的 SourceView
组件的缓冲区。
gtk_source_view_new_with_buffer()
是我发现将 SourceBuffer
附加到 SourceView
的唯一方法。问题是这个函数正在创建一个 SourceView
,我想将一个 SourceBuffer
附加到一个已经创建的使用 Glade 构建的 SourceView
。我该怎么做?
我没有粘贴任何代码,因为没有可显示的代码。我刚刚创建了一个 Glade 文件,其中包含一些 UI 组件以及 ID 为 gtk_sourceview
的 SourceView-2
组件。
在 C 文件中,我使用
获取 SourceView 组件GtkSourceView *sourceview = GTK_WIDGET (gtk_builder_get_object (builder, "gtk_sourceview"));
缺少的是如何创建 SourceBuffer
并将其附加到 SourceView
组件。
谢谢!
更新:我尝试使用:
GtkSourceBuffer *sourcebuffer = GTK_SOURCE_BUFFER(gtk_text_view_get_buffer(GTK_TEXT_VIEW(sourceview)));
但是我得到了以下断言错误:
(tour_de_gtk:13884): Gtk-CRITICAL **: IA__gtk_text_view_get_buffer: assertion `GTK_IS_TEXT_VIEW (text_view)' failed
我该怎么做才能解决这个问题?
谢谢!
最佳答案
GtkSourceView
已经有一个缓冲区。以与获取常规文本缓冲区相同的方式获取它:
GtkSourceBuffer *buffer = GTK_SOURCE_BUFFER(gtk_text_view_get_buffer(GTK_TEXT_VIEW(source_view)));
这是因为 GtkSourceView
是 GtkTextView
的子类,所以 TextView 函数也适用于它。
编辑:
这是一个有效的程序和 glade 文件。
程序:
#include <gtk/gtk.h>
#include <gtksourceview/gtksourceview.h>
#include <gtksourceview/gtksourcebuffer.h>
#include <gtksourceview/gtksourcelanguagemanager.h>
int
main(int argc, char **argv)
{
gtk_init(&argc, &argv);
GtkBuilder *builder = gtk_builder_new();
if(gtk_builder_add_from_file(builder, "sourceview.ui", NULL) == 0)
g_error("In real code, you would handle an error here");
gtk_builder_connect_signals(builder, NULL);
GtkWidget *window = GTK_WIDGET(gtk_builder_get_object(builder, "window"));
GtkSourceView *sourceview = GTK_SOURCE_VIEW(gtk_builder_get_object(builder, "gtk_sourceview"));
/* Get the buffer */
GtkSourceBuffer *sourcebuffer = GTK_SOURCE_BUFFER(gtk_text_view_get_buffer(GTK_TEXT_VIEW(sourceview)));
/* Do stuff to the buffer, to prove we've really got the GtkSourceBuffer */
gtk_text_buffer_set_text(GTK_TEXT_BUFFER(sourcebuffer),
"def hello():\n\tprint 'This should be highlighted as Python'\n", -1);
GtkSourceLanguageManager *manager = gtk_source_language_manager_get_default();
GtkSourceLanguage *python = gtk_source_language_manager_get_language(manager, "python");
gtk_source_buffer_set_language(sourcebuffer, python);
/* Okay, that should prove it, now run the program */
gtk_widget_show_all(window);
gtk_main();
return 0;
}
空地文件:
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtksourceview 3.0 -->
<requires lib="gtk+" version="2.20"/>
<!-- interface-naming-policy project-wide -->
<object class="GtkSourceBuffer" id="gtksourcebuffer">
<property name="max_undo_levels">0</property>
</object>
<object class="GtkWindow" id="window">
<property name="default_width">300</property>
<property name="default_height">300</property>
<signal name="destroy" handler="gtk_main_quit" swapped="no"/>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">automatic</property>
<property name="vscrollbar_policy">automatic</property>
<child>
<object class="GtkSourceView" id="gtk_sourceview">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="left_margin">2</property>
<property name="right_margin">2</property>
<property name="buffer">gtksourcebuffer</property>
<property name="tab_width">4</property>
<property name="auto_indent">True</property>
<property name="indent_on_tab">False</property>
</object>
</child>
</object>
</child>
</object>
</interface>
关于C Gtk+2 Glade3 : how can i set a SourceBuffer to a GtkSourceView that was loaded from glade?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5133183/
我正在尝试使用 Glade、PyGTK 和 Python 设置一个小的下载应用程序。我已经计划好了我想如何编写这个进度条和所有的脚本,尽管我觉得我正在以错误的方式去做,因为......好吧......
我正在尝试在 mac OSX el capan 上安装 Glade。我在 https://glade.gnome.org/sources.html 上下载了源代码 我按照源代码中带有“安装”文本的说明
我试图用glade 3.20做一个GtkHeaderBar应用程序,但每次创建我的python应用程序时,我的老学校栏都在顶部。 在glade 3.19 中,检查客户端装饰属性在顶部创建了一条线,我可
我是 gtk+ 编程领域的新手。我仍在探索许多使用选项。我将使用 C 语言进行编码。我有以下问题: 哪个更好?编写代码还是使用 glade 生成的 .glade 文件? 哪个更好用? libglade
我在 Internet 上进行了一项研究,寻找教程/文档来解释我如何在 Java Gnome 项目中使用在 Glade 中设计的 UI,但没有成功。我已经知道如何使用 Java Gnome/GTK 从
我已经阅读了一些 Glade 手册并创建了一个 GUI,其中有一个我想通过代码填充的 TreeView。空地文件是: False 3 Tree Viewe
我正在使用带有 gtk2hs 绑定(bind)的编辑器 Glade 在 Haskell 中编写 GUI。目前,我在对单选按钮进行分组时失败了。它不会让我选择组名。有人可以帮忙吗? 最佳答案 对于组中的
Glade:如何将多个参数传递给信号处理程序? 最佳答案 你在林间空地能做的事情非常有限。您可以将零个或一个对象作为用户数据传递给信号处理程序。该对象必须是一个小部件(或其他对象),也存在于 glad
我正在尝试使用 Glade/gtk/vala 制作一个简单的应用程序。到目前为止,我有这个: using Gtk; class HelloWorldApp : GLib.Object { co
我正在使用代码块和空地编写一个 C 程序。起初我以为问题出在我的代码上。我尝试了在网上找到的不使用glade(仅GTK)的示例代码,并且它有效。然后我尝试了一个只有一个窗口和一个 TextView 的
如果我在 FreeBSD 8 下静态链接 GTK+ 程序,gtk_builder_add_from_file() 突然返回错误: Invalid object type `GtkWindow' 如何解
Glade 3.14.2 似乎打开了我的 .glade 文件,但没有显示任何内容。我可以在文本编辑器中查看所有 xml 详细信息。我的 .glade 文件中的 header 是:
我正在尝试将 Glade 3 用于我在 Windows 7 上的 Ada 程序。我找到了 3.6 版的方法,但 gtk-builder-convert 未被识别为脚本。我已经尝试通过 Google 找
如何将对话窗口的按钮(例如 GtkDialog)与响应 Gtk::ResponseType 链接起来值(value)与格莱德?。 我知道如何以编程方式执行此操作,但我不知道如何使用 Glade 执行此
我正在 Glade (GTK# 3.20 + C#) 中制作应用程序界面原型(prototype),并通过 CssProvider 使用我的 CSS 样式。我有这个: 问题是我使用 GTKLayout
您好,我正在使用 gtk3 和 Glade 3.14...我想向 Glade 添加一个自定义小部件,以便我可以轻松地将其添加到我的用户界面中。 我发现空地中缺少旋钮小部件,我在其中找到了旋钮小部件 h
我想多次显示在 Glade 文件中定义的 Gtk.Dialog。 目前,我可以使用自定义按钮来调用对话框的 hide() 方法,但是,如果用户使用 Alt+F4 关闭对话框,它重新打开为空: 在控制台
首先,我是编程语言世界的新手,当然对 Python 也很陌生。 在我的工作中,我们使用 Linux 系统。我有时需要检查终端上的一些命令和脚本输出。因此,我想使用非常基本的 GUI 编写一个小型应用程
我想处理菜单单击事件,但是,正在发生此丢失处理程序警告,我哪里错了?我将信号 ab 与处理程序 abcd 连接在 menuitem6 上,在激活事件上,处理点击事件是否正确? 这是错误: abc.py
我使用glade构建了一个数据库操作GUI,对于我的添加按钮层次结构是添加->确认对话框->(如果是)添加数据。如何访问主窗体中的每个小部件值?我是 gtk 和glade 的新手,我设法消除了大部分错
我是一名优秀的程序员,十分优秀!