2016-09-20 62 views
0

我在tkinter-python中構建一個類似於應用程序的記事本。可以選擇在應用程序的文本字段中更改寫入文本的字體。tkinter tag_config不起作用

我已經創建了一個字體選擇器彈出屏幕,在點擊'字體'菜單時從主窗口調用,它基本上創建一個FontChooser類對象並傳遞給主窗口,該窗口在人窗口中設置字體。

其中字體得到在主窗口中設置是代碼的樣品,

root = Tix.Tk(className="Notepad") 
notepad = ScrolledText(root, width=100, height=100) 

def open_font(): 
    font = MyFont.askChooseFont(root) 
    notepad.tag_add("bt", "sel.first", "sel.last") 
    notepad.tag_config("bt", font=font.getFontTuple()) 

現在,當我第一運行應用程序,並選擇文本的一部分,改變字體,它工作正常。但是之後,無論我選擇哪些文本部分並更改字體,都忽略了選擇內容並將字體應用於整個文本。任何人都可以讓我知道這裏有什麼問題嗎?

回答

0

IDLE使用tag_config來語法化Python代碼,它可以在過去15年的所有Python版本和主要操作系統上運行。

要知道爲什麼它似乎失敗了,你需要找到一個失敗的MCVE。沒有tix和滾動條開始。 (Tix在3.6中已棄用,並且錯誤未被修復。)另請注意,您的代碼對每個選擇使用相同的標記,以便在更改配置時適用於所有以前的選擇。

這裏是符合預期和預期的簡化代碼。

import tkinter as tk 
import time 
root = tk.Tk() 
text = tk.Text(root) 
text.pack() 
text.insert('1.0', "line 1\nline 2\nline 3\n") 
text.tag_add('bg', '1.0', '1.4') 
text.tag_config('bg', background='red') 
root.update() 
time.sleep(1) 
text.tag_add('bg', '2.0', '2.4') 
text.tag_config('bg', background='blue') 
root.update() 

你可以嘗試一步一步地修改它,直到它再現你的問題或做你想做的事。

編輯與示例修改:使用'sel.first'和'sel.last',而不是硬編碼索引。

import tkinter as tk 
import time 
root = tk.Tk() 
text = tk.Text(root) 
text.pack() 
text.insert('1.0', "line 1\nline 2\nline 3\n") 
root.update() # make text visible for selection 
input('select some text') 
text.tag_add('bg', 'sel.first', 'sel.last') 
text.tag_config('bg', background='red') 
root.update() # make change visible 
input('select some text') 
text.tag_add('bg', 'sel.first', 'sel.last') 
text.tag_config('bg', background='blue') 
root.update() # make 2nd change visible 
input('look at result') 

在控制檯中運行。移動tk窗口,使控制檯和GUI都可見。根據提示進行選擇。點擊控制檯*並點擊返回以允許輸入語句返回。重複。對我來說,結果是兩種選擇都變成了藍色。我建議在下一個實驗中更改字體而不是bg顏色。

  • 在Windows上,當單擊控制檯時,tk窗口中的選擇突出顯示消失,因爲Windows一次只允許在一個窗口中進行可見選擇。但是,選擇標記仍然存在於文本小部件中,因此tag_add仍然可以工作。
+0

在這裏,您已將標記範圍硬編碼爲1.0到1.4。問題似乎與範圍定義爲'sel.first'和'sel.last'。在第一次傳球之後,從第二次傳球開始,這個選擇不是我實際選擇的文字。它正在考慮TextArea上的整個文本。 – SubhasisM

+0

什麼'似乎是'的問題往往不是什麼問題。這就是爲什麼我建議你做最小的改變實驗 - 找出問題所在。請重新閱讀我的建議。我做了將硬編碼索引更改爲選定索引的實驗,而後者本身不是問題。你應該繼續下一個實驗 - 改變字體而不是顏色。 –