我正在尝试使用 gtk2 和 python 为 Ubuntu 创建一个文本编辑器(打算试一试!)。到目前为止,我已经能够实现 open 函数。但是,我只是不知道如何获取 TextView 的内容并将其写入文件(用户将命名并决定将其保存在哪个目录中)。
以下是 gtk.FileChooserDialog 保存函数的代码:
def on_saveButton_clicked(widget):
print 'saveButton clicked'
savechooser = gtk.FileChooserDialog(title='Save File', action=gtk.FILE_CHOOSER_ACTION_SAVE,
buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
gtk.STOCK_SAVE, gtk.RESPONSE_OK))
filter = gtk.FileFilter()
filter.set_name('All files')
filter.add_pattern('*')
savechooser.add_filter(filter)
pyFilter = gtk.FileFilter()
pyFilter.set_name('Python source file')
pyFilter.add_pattern('*.py')
savechooser.add_filter(pyFilter)
rbFilter = gtk.FileFilter()
rbFilter.set_name('Ruby source file')
rbFilter.add_pattern('*.rb')
savechooser.add_filter(rbFilter)
cppFilter = gtk.FileFilter()
cppFilter.set_name('C++ source file')
cppFilter.add_pattern('*.cpp')
savechooser.add_filter(cppFilter)
response = savechooser.run()
if response == gtk.RESPONSE_OK:
filename = savechooser.get_filename()
print filename, 'selected.'
elif response == gtk.RESPONSE_CANCEL:
print 'Closed, file not saved.'
savechooser.destroy()
有人有什么想法吗?
答案1
首先,请考虑按照@SylvainPineau 的建议将代码更新为 Python 3 和 Gtk+3 (PyGObject)。然后,您需要将 GtkTextView 设为实例属性/成员,以便可以从内部访问它on_saveButton_clicked
。最后,要实际保存 GtkTextBuffer 的内容,您可以使用 Python 内置函数或 GIO。
使用 Python 内置函数(假设您将 GtkTextView 保存在self.view
):
if response == gtk.RESPONSE_OK:
filename = savechooser.get_filename()
print(filename, 'selected.')
buf = self.view.get_buffer()
text = buf.get_text(buf.get_start_iter(),
buf.get_end_iter(),
True)
try:
open(filename, 'w').write(text)
except SomeError as err:
print('Could not save %s: %s' % (filename, err))
附言:我注意到您没有使用类,因为您的on_saveButton_clicked
函数没有参数self
。如果是这样,为了测试您当前的代码,您可以将其设为self.view
全局TEXT_VIEW
变量。