Python Tkinter文本编辑器不会将字体保存到文本文件

时间:2015-02-06 23:26:36

标签: python-2.7 fonts tkinter text-editor rich-text-editor

目前,我正在使用python和tkinter开发GUI文本编辑器。感谢SO的优秀人才(感谢Rinzler),我设法修改了文本的字体。但是,我无法将字体和字体大小保存到txt文件。 我知道这应该是可能的,因为记事本可以修改并保存带有指定字体的txt文件。

这是保存到文件的代码:

def file_saveas():
    filename = tkFileDialog.asksaveasfile(mode='w', defaultextension=".txt")
    if filename is None: # asksaveasfile return `None` if dialog closed with "cancel".
        return
    text2save = str(textPad.get(1.0, END)) # starts from `1.0`, not `0.0`
    filename.write(text2save)
    filename.close()
    print filename

这是改变字体的代码(由Rinzler提供):

def choose_font():
global root, textPad # I hate to use global, but for simplicity

t = Tkinter.Toplevel()
font_name = Tkinter.Label(t, text='Font Name: ')
font_name.grid(row=0, column=0, sticky='nsew')
enter_font = Tkinter.Entry(t)
enter_font.grid(row=0, column=1, sticky='nsew')
font_size = Tkinter.Label(t, text='Font Size: ')
font_size.grid(row=1, column=0, sticky='nsew')
enter_size = Tkinter.Entry(t)
enter_size.grid(row=1, column=1, sticky='nsew')

# associating a lambda with the call to text.config()
# to change the font of text (a Text widget reference)
ok_btn = Tkinter.Button(t, text='Apply Changes',
                   command=lambda: textPad.config(font=(enter_font.get(), 
                   enter_size.get())))
print font
ok_btn.grid(row=2, column=1, sticky='nsew')
done = Tkinter.Button(t, text='Get rid of Pushy!', command=t.destroy)
done.grid(row=4, column=1, sticky='nsew')
# just to make strechable widgets
# you don't strictly need this
for i in range(2):
    t.grid_rowconfigure(i, weight=1)
    t.grid_columnconfigure(i, weight=1)
t.grid_rowconfigure(2, weight=1)

最后,这是读取字体和其他配置信息的代码:

font = (fontname, size)
textPad.config(
    borderwidth=0,
    font=font ,
    foreground="green",
    background="black",
    insertbackground="white", # cursor
    selectforeground="blue", # selection
    selectbackground="#008000",
    wrap="word", 
    width=64,
    undo=True, # Tk 8.4
    )

我搜索了互联网,但没有提出任何答案,说明为什么不保存字体和文字大小。任何帮助将不胜感激。

我正在使用python 2.7.7,Tkinter,这是在Windows 7上运行。

任何帮助操作rtf文件也会有所帮助(目前,我看到标签而不是结束格式)。

2 个答案:

答案 0 :(得分:1)

在tkinter中没有对此的支持。您必须选择支持字体的文件fomat(rtf,.docx,.html等),将窗口小部件中的数据转换为此格式,然后将其写入文件。

答案 1 :(得分:1)

记事本只能为其打开的每个文件提供自定义字体和大小,它不会将其保存到文件中,它只会记住用户的自定义设置,并在您使用它时将它们应用到窗口中。 tkinter文本小部件可能很难将格式保存到另一种格式,我已经尝试将其转换为XML以保存到.docx但我没有成功。我使用了我自己的格式,这是一个纯文本文件,其开头的tkinter文本小部件标记的'索引'及其行和列索引,然后是文档开始位置的标记,然后是文档。但是这不能保存图像,当您在另一个文字处理器中打开它时,它会打开所有格式索引。