通过Function - python将Text插入TextBuffer

时间:2012-03-05 13:19:54

标签: python textview pygobject gtk-textbuffer

我有以下问题:

如何在textbuffer中插入文字?

Interface.py

class MainWindow:
    def __init__(self):

        # Build our Interface from the XML/Glade file
        gladefile = "MainWindow.glade"
        try:
            self.builder = Gtk.Builder()
            self.builder.add_from_file(gladefile)
        except:
            print("Failed to load Glade file: %s" % gladefile)

        # Connect signals
        self.builder.connect_signals(self)

        # Get the widgets
        self.window = self.builder.get_object("MainWindow")

        ...

        # TextViews
        self.TextViewCommandInput = self.builder.get_object("TextViewCommandInput")
        self.TextViewCommandOutput = self.builder.get_object("TextViewCommandOutput")

        ...

def DrawCommandView(output):
    TextBufferCommandInput = MainWindow.TextViewCommandInput.get_buffer()
    TextBufferCommandInput.insert_at_cursor(output + "\n")

在文件中导入“DrawCommandView”

Commands.py

from Interface import MainWindow, DrawCommandView

output = "Hello World"
DrawCommandView(output)

if __name__ == "__main__":
    StartMainWindow = MainWindow()
    StartMainWindow.main()

但我一直收到这个错误:

Traceback (most recent call last):
  File "/home/user/Dokumente/Workspace/project/Commands.py", line 5, in <module>
    DrawACommandView(output)
  File "/home/user/Dokumente/Workspace/project/Interface.py", line 182, in DrawCommandView

    TextBufferCommandInput = MainWindow.TextViewCommandInput.get_buffer()
AttributeError: class MainWindow has no attribute 'self'

感谢您的帮助!

格尔茨

2 个答案:

答案 0 :(得分:0)

当你说TextBufferCommandInput = MainWindow.TextViewCommandInput.get_buffer()时 您在MainWindow中要求一个名为TextViewCommandInput的类属性。您没有类属性TextViewCommandInput,您有一个实例属性TextViewCommandInput。您需要将MainWindow实例传递给DrawCommandView才能获得TextViewCommandInput。

答案 1 :(得分:0)

我认为您必须set_text()而不是get_buffer()

请参阅set_text()文档。

之后get_buffer()可以检索set_text()插入的文字。

以下是我一直使用的一些通用方法来使用缓冲区。

def GetTextBuffer(self):
    self.text_buffer = self.text_edit.get_buffer()
    # self.text_edit is a Gtk.TextView() instance
    # to get the text buffer from TextView
    # buffer.get_text( start iterator, end iterator, bool )
    # the third argument set to True = Include hidden characters
    # third argument set to False = Don't include hidden characters
    # hidden characters would be visual formatting markup and such
    return self.text_buffer.get_text(
        self.text_buffer.get_start_iter(),
        self.text_buffer.get_end_iter(), 
        False)

def SetTextBuffer(self, to_buffer):
    # to_buffer is user input from widgets, or default values set at run time.
    text_buffer = self.text_edit.get_buffer()
    text_buffer.set_text(to_buffer)