2017-02-02 105 views
0

所以,tkinter文本編輯器!
編輯器顯然需要有文本樣式,需要使用標籤將打印文本更改爲當前選擇的格式。但問題是標籤名稱在格式更改時需要更改,否則標籤將應用於整個文本。 (這是我努力找出相當長的一段時間的問題)
爲了避免這種情況,你需要的標籤很多(如bold, both, calibri等),所以代碼看起來像這樣tkinter - 管理多個標籤

if style == 'bold': 
    tag_add('bold', 'insert -1c', 'insert') 
    tag_configure('bold', font=('Calibri', 12, 'bold')) 

if stlye == 'italic': 
    etc etc 

這是糟糕的代碼,並且使不同的字體/大小不可能。
是否有舉辦多個標籤這樣的一個正確的方式,像

tag.add(currentstyle, 'insert -1c', 'insert') 
tag.config(currentstyle, font=(currentfont, currentsize, currentweight, currentslant)) 

感謝您的幫助

UPDATE
從布萊恩

tagname = '{}-{}-{}-{}'.format(font, fontsize, weight, slant) 

textbox.tag_add(tagname, 'insert -1c', 'insert') 
textbox.tag_configure(tagname, font=(font, fontsize, weight, slant)) 
有幫助不小的解決

現在每個標籤都有唯一的名稱

回答

1

是的,您需要爲您使用的每種不同字體創建一個唯一的標籤。實際上,這並不是很糟糕,因爲大多數文件只使用3-4個變體,或者可能是十幾個最差的情況。唯一真正的困難是,如果你想同時使用粗體和斜體,你必須創建一個粗體標籤,一個斜體標籤和一個粗體斜體標籤。

這是可怕的代碼,並且使不同的字體/大小不可能。

它不會使它變得不可能,只是有點困難。你的代碼實際上很接近你如何去做。

當用戶更改字符的樣式時,需要通過組合當前樣式和任何新屬性來創建樣式名稱的規範形式。例如,如果字符當前爲粗體12點,而他們將其更改爲斜體14點,則新標籤可能爲「斜體-12」。如果他們想保持大膽,那可能是「大膽 - 斜體-12」。然後,您需要檢查是否有該名稱的標籤,如果沒有,則創建它,然後刪除任何以前的字體標籤並添加新的字體標籤。

這實際上只是字體的一個問題。對於其他屬性(如顏色和邊框),您可以簡單地分別使用所有不同的標籤(即:如果爲「background-blue」和「foreground-red」創建標籤,則可以將這兩個標籤單獨應用於文本。

我提供了做類似這樣的東西在這裏一個例子:https://stackoverflow.com/a/3736494/7432

+0

猜你要覺得有時候框外,由於 – EriktheRed

+0

@EriktheRed:Tkinter的更像是一家木材店比一個傢俱店你。可以與Tkinter創建非常好的界面,但有時您必須自己完成這項工作。 –