我有以下问题:
如何在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'
感谢您的帮助!
格尔茨
答案 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)