2015-02-06 97 views
1

目前,我正在使用python和tkinter編寫GUI文本編輯器。感謝SO的偉大人士(謝謝Rinzler),我設法修改了文本的字體。但是,我無法將字體和字體大小保存到txt文件。 我知道這應該是可能的,因爲記事本可以用指定的字體修改和保存txt文件。Python Tkinter文本編輯器不會將字體保存到文本文件

這是代碼保存到一個文件:

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 

這是代碼(林茲勒提供)更改字體:

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文件也將是有益的(目前,我看到了標籤,而不是結束格式) 。

回答

1

在tkinter中沒有這方面的支持。你將不得不選擇一個支持字體的文件格式(rtf,.docx,.html等),將小部件中的數據轉換爲這種格式,然後將其寫入文件。

+0

謝謝你的解釋。但是,我嘗試使用rtf格式並顯示所有標籤。我將如何在tkinter中以實際的格式顯示它?另外,當我嘗試從編輯器保存RTF文件時,格式仍然未保存。 – 2015-02-07 00:00:02

+1

@PenonymEnigma:不幸的是,你將不得不分析rtf數據並重新格式化文本部件。文本小部件無法顯示任何富文本格式。 – 2015-02-07 00:51:44

+0

謝謝。我對Tkinter很新。你能告訴我我該怎麼做。 – 2015-02-07 00:54:09

1

記事本只能爲打開的每個文件設置自定義字體和大小,不會將其保存到文件中,它只是記住用戶的自定義設置,並在使用它時將其應用於其窗口。 tkinter文本小部件可能會將格式保存爲另一種格式,我試過將其轉換爲XML以保存爲.docx,但我沒有成功。我已經使用了我自己的格式,它是一個純文本文件,它在開始時包含tkinter Text小部件標籤的「索引」,它們的行索引爲&,然後是文檔開始位置的標記,然後是文檔。這不能保存圖像,並且在另一個文字處理器中打開時會打開所有格式索引。