2012-03-28 72 views
3

我一直在努力製作一個簡單的文本編輯器,並且一直在試驗標籤。我已經能夠創建使用標籤的理由。現在我添加一個大膽的選項。設置爲使用標籤加粗所選文本

我的問題是,我找不到很多使用"sel"標記的例子,標記是當前選擇使用的標記。

每當我使用SEL標記時,只要文本突出顯示,文本就會變爲粗體,當文本變爲未突出顯示時,文本將恢復爲舊的粗體字體。

這是我的代碼的一小部分:

def Bold(self, body, Just, Line, selected font): 
    bold font = tkFont.Font(family=selectedfont, weight="bold") 
    selected font = boldfont 
    body.tag_config("sel",font=selectedfont) 
    body.tag_add("sel", 1.0,END) 

當按下按鈕Bold,先前的函數被調用。 現在,我的body.tag_add("sel", 1.0, END)1.0設置爲END,因爲我不知道如何獲取選定的域。 我試過<<Selection>>,但經過很長時間的實驗,它沒有幫助我。

回答

4

你只需要tag_add()你的函數中:

import Tkinter as tk 

def make_bold(): 
    aText.tag_add("bt", "sel.first", "sel.last") 

lord = tk.Tk() 

aText = tk.Text(lord, font=("Georgia", "12")) 
aText.grid() 

aButton = tk.Button(lord, text="bold", command=make_bold) 
aButton.grid() 

aText.tag_config("bt", font=("Georgia", "12", "bold")) 

lord.mainloop() 

我剛好跨越而教育example莫過於布賴恩·奧克利等,
在一個完全不相關的搜索!

這裏是更具活力的替代的一個簡單的例子:

import Tkinter as tk 
import tkFont 

def make_bold(): 
    current_tags = aText.tag_names("sel.first") 
    if "bt" in current_tags: 
     aText.tag_remove("bt", "sel.first", "sel.last") 
    else: 
     aText.tag_add("bt", "sel.first", "sel.last") 


lord = tk.Tk() 

aText = tk.Text(lord, font=("Georgia", "12")) 
aText.grid() 

aButton = tk.Button(lord, text="bold", command=make_bold) 
aButton.grid() 

bold_font = tkFont.Font(aText, aText.cget("font")) 
bold_font.configure(weight="bold") 
aText.tag_configure("bt", font=bold_font) 

lord.mainloop() 
+0

謝謝,我明白。所以SEl只適用於不斷突出顯示的文本。如果你突出顯示它消失了。但是,您可以使用該特定標籤來獲取域名並應用包含粗體字體的其他標籤。 謝謝,這幫助我完成了今後計劃要做的這些以及其他許多事情,例如彩色文本。 – reallycoolnerd 2012-03-28 23:36:45

+1

@reallycoolnerd我剛更新了我的答案。你可能會覺得它很有用。 – 2012-03-31 02:48:50

+0

它花了我一點時間才能理解它,但我已經選擇了它,並且能夠解釋它....謝謝你,它幫助我爲Bold開關 – reallycoolnerd 2012-03-31 04:06:22

1

標籤屬性屬於標籤,而不是文字。因此,當您突出顯示某些內容時,將屬性應用於"sel"標記,它只會影響具有"sel"標記的文本。當您刪除標籤(通過不亮)時,屬性會恢復爲默認值(或可能存在的任何其他標籤)。

要使文本變爲粗體,您必須創建一個具有粗體屬性的標籤並將該標籤分配給文本。只要文本具有該標籤,它就會具有該標籤的屬性。

+0

所以我需要獲得突出顯示和突出顯示的結束位置,並將其用作我粗體標記中的域? – reallycoolnerd 2012-03-28 23:32:20

+0

沒關係,我玩了上面的答案,我忘了在其中一個標籤上更改我的域名。謝謝你,雖然這也幫助我更好地理解標籤 – reallycoolnerd 2012-03-28 23:38:45

+0

@reallycoolnerd:當你的syb「域名」是什麼意思? Tkinter沒有在文本小部件或任何其他小部件中命名爲「域」。 – 2012-03-29 01:37:07

相關問題