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

我需要能够显示图像和文本(图像可resize和文本可编辑)。 我想也许HTML类型的东西可以做到这一点。 对于像文字处理器如何工作这样的非常糟糕的例子。 键入和编辑文本以及粘贴和编辑图像。

在此先感谢,对不可能(对我而言)的任务感到抱歉。

编辑:我也想以某种方式保存这个。

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

textview.set_editable(true) 

您需要获取textbuffer,即textviews数据:

 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") 

这将使用“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) 

这会将数据加载到textbuffer中。

Edit2 :如果你想让用户能够拖动来移动和resize,你将不得不将pixbuf加载到图像小部件中,将图像小部件加载到事件框中,将事件框放入子锚中以放入textview您可以处理该窗口小部件的x事件,并在处理程序中编写代码以移动或调整图像大小。

资源:

  • gtk.TextView
  • gtk.TextBuffer
  • gtk.gdk.Pixbuf