0

我有以下问题:

如何在我的文本缓冲区中插入文本?

接口.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”

命令.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'

谢谢你的帮助!

问候

4

2 回答 2

0

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

于 2012-03-05T14:30:52.400 回答
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)
于 2012-08-04T14:25:49.247 回答