在快捷应用中显示和编辑文本和图像

在快捷应用中显示和编辑文本和图像

我需要能够显示图像和文本(图像可调整大小,文本可编辑)。我在想也许 HTML 类型的东西可以做到这一点。举一个非常糟糕的例子,比如文字处理器的工作原理。输入和编辑文本以及粘贴和编辑图像。

提前致谢,对于这个对我来说不可能完成的任务,深表抱歉。

编辑:我也希望能够以某种方式保存它。

答案1

实际上,您可以使用 TextView 小部件来执行此操作。首先,您应该将 editable 设置为 true:

textview.set_editable(true)

您将需要获取其文本缓冲区,即文本视图数据:

buffer = textview.get_buffer()

然后使用该缓冲区,您可以获取并设置其中的数据。要获取缓冲区中当前的文本,请使用:

buffer.get_text(buffer.get_start_iter(), buffer.get_end_iter(), false)

第一个和第二个参数是获取文本的范围,在本例中为全部文本。最后一个参数指定是否要获取隐藏字符,在本例中为 false。要插入文本,您可以使用以下命令:

buffer.insert(buffer.get_end_iter(), "Sample text")

第一个参数指定插入文本的位置,在本例中是在末尾。第二个参数是要插入的文本。要替换缓冲区中的所有数据,您可以使用:

buffer.set_text("Sample text")

这将用“示例文本”替换缓冲区中的所有内容。要插入图像,您需要创建一个 pixbuf 来执行此操作,请使用以下命令:

pixbuf = gtk.gdk.pixbuf_new_from_file(filename)

要调整 pixbuf 的大小,请使用:

pixbuf.scale_simple(dest_width, dest_height, gtk.gdk.INTERP_BILINEAR)

前两个参数是新的宽度和高度,第三个参数是插值类型,控制其如何缩放(有四种类型可以找到这里)然后你可以使用以下命令将此 pixbuf 添加到缓冲区:

buffer.insert_pixbuf(buffer.get_end_iter(), pixbuf)

这将在缓冲区的末尾插入一个图像。

您还可以执行诸如添加小部件、设置边距、从剪贴板复制和粘贴、在光标处插入等操作,但您可以查看下面的链接。

编辑:对于格式化的保存/加载,您可以使用 textbuffers 序列化方法。首先,您应该使用它的 register_serialize_tagset() 方法:

format = buffer.register_serialize_tagset()

接下来就可以使用它的serialize方法来获取序列化的数据:

data buffer.serialize(buffer, format, buffer.get_start_iter(), buffer.get_end_iter())

这将返回 textbuffer 内部格式的数据,您可以将其保存到文件中。要加载此数据,首先调用 textbuffer 的 register_deserialize_tagset() 方法:

format = emptyBuffer.register_deserialize_tagset()

然后您可以使用其 deserialize() 方法加载数据:

emptyBuffer.deserialize(emptyBuffer, format, emptyBuffer.get_end_iter(), data)

这会将数据加载到文本缓冲区中。

編輯2:如果您希望用户能够通过拖动来移动和调整大小,则必须将 pixbuf 加载到图像小部件中,将图像小部件加载到事件框中,将事件框加载到子锚点中,然后放入文本视图中,您可以处理该小部件的 x 事件,并在处理程序中编写代码来移动或调整图像大小。

资源:

相关内容