1

就像一些历史一样,我已经使用 python 大约 5 年了,最终决定在 Glade 制作我的第一个 gui 应用程序。

我从一些基本的东西开始,我有一个按钮、一个 Gtkentry 和 gtktextview 这就是我想要完成的:

按下按钮时,从 gtk.entry 中获取文本并将其附加到 gtk.textview

现在我遇到的主要问题是我找不到有关如何使用小部件的下降文档,并且我在 Internet 上找到的示例参考了一个构建器变体以及另一个我只能假设已停止的 glade 项目变体. 我想了解 builder 如何融入 python / glade 协作。

到目前为止我的代码:

import gtk
import pygtk

def onDeleteWindow(self, *args):
    Gtk.main_quit(*args)

def hello(button):
    text_buffer.set_text(txtinput.get_text())



builder = gtk.Builder()
builder.add_from_file("dagui.glade")

handlers = {
    "onDeleteWindow": gtk.main_quit,
    "buttondown": hello
}
builder.connect_signals(handlers)

textarea = builder.get_object("textview1")
window = builder.get_object("window1")
txtinput = builder.get_object("entry1")
window.show_all()

gtk.main()
window.show_all()

gtk.main()

现在这一切正常,按下按钮将打印 gtk.entry 中的内容,但我找不到如何将其附加到 textview 中。我也不确定要搜索什么来查找文档,我尝试了“gtk builder gtk.textview”和 pygtk build gtk.textview append”以及所有其他变体。

虽然知道如何简单地将文本添加到文本视图会很棒,但如果有一个链接到某个地方,我可以用简单的英语获得如何使用这些小部件,我将永远充满乐趣。

4

3 回答 3

1

Frob gtk.TextView,您需要gtk.TextBuffer使用 textview 的buffer属性来获取 。

从文本缓冲区中,您需要使用该方法获取指向缓​​冲区末尾的迭代器get_end_iter。使用该迭代器和您的文本,您可以使用文本缓冲区的insert方法。

编辑:由于我没有该dagui.glade文件,因此无法对其进行测试,但请参阅以下代码:

def hello(button):
    global textarea, txtinput
    buffer = textarea.get_property('buffer')
    i = buffer.get_end_iter()
    buffer.insert(i, txtinput.get_text())
    # clear the input window after appending the text
    txtinput.set_text('')
于 2012-09-30T06:45:34.720 回答
0

我想通了,我发现 gtk.textview.get_buffer 实际上设置了缓冲区 ID,然后 textview.set_text(buffer) 就是我所需要的。

这是完整的工作代码,glade 只是一个按钮、一个条目和一个文本视图:

#!/usr/bin/python

import os
import sys
import gtk
import pygtk

def onDeleteWindow(self, *args):
    Gtk.main_quit(*args)

def hello(button):
    textbuffer = textarea.get_buffer()
    textbuffer.set_text(txtinput.get_text())



builder = gtk.Builder()
builder.add_from_file("dagui.glade")

handlers = {
    "onDeleteWindow": gtk.main_quit,
    "buttondown": hello
}
builder.connect_signals(handlers)

textarea = builder.get_object("textview1")
window = builder.get_object("window1")
txtinput = builder.get_object("entry1")
window.show_all()


gtk.main()
于 2012-09-30T14:41:47.693 回答
-1

使用它来添加文本:

textarea.set_text('whatever you want')

这用于添加 pango 标记(http://goo.gl/94Pkk):

textarea.set_markup('<span size="large>Example</span>')

这是文档: http: //python-gtk-3-tutorial.readthedocs.org/en/latest/index.html

于 2012-09-30T06:35:56.890 回答