2013-10-20 54 views
1

我在我的Tkinter GUI中有文本區域。我想實現一個將刪除最後一行的撤消功能。爲此,我需要獲取最後一行的行和列。如何獲取Tkinter中文本結束位置的行和列?

如何獲得最後一行的行和位置?一旦我獲得了職位,我該如何刪除該行?

我已經在谷歌搜索了這個,但我沒有得到任何有價值的鏈接。

+0

您是否知道tkinter已撤消內置? –

+0

是的。我知道這一點。但我不確定如何使用它。 我使用undo = true選項創建了文本小部件。然後我們必須調用edit_undo()方法。但我不知道該把它叫做什麼,因此也就是混亂。 –

回答

9

最後一行的索引是"end"或tkinter常數END。 tkinter總是在最後插入一個看不見的換行符,所以這實際上代表了用戶輸入的最後一個字符之後的索引。

您可以使用文本小部件的index方法獲取行和列號。因此,例如,與此獲得的最後一個字符的行/列:

pos = textwidget.index("end") 

您可以添加改性劑到一個索引,以獲得相對於其他位置的位置。例如,要獲得行首的索引,您可以追加linestart(例如:「3.5 linestart」會給你3.0)。你也可以通過追加「-n chars」或「-nc」來減去字符(例如:「3.5-1c」會給你3.4)。

這些修飾符可以結合使用。因此,如果想要從最後找到最後一行文本的開頭(實際上是在tkinter添加的額外換行符之後),請備份一個字符以結束行,然後使用「linestart」開始:

pos = textwidget.index("end-1c linestart") 

對於它的價值,這是所有記錄和相當容易找到。在我寫這篇文章的時候,當我在谷歌搜索「tkinter文本小部件」時,第一個結果指向了一個記錄文本小部件索引表達式的頁面:http://effbot.org/tkinterbook/text.htm。查找名爲「表達式」的部分。

要刪除一行文本,您需要調用delete方法以及要刪除的文本的起始索引和結束索引。要刪除最後一行,請使用:

textwidget.delete("end-1c linestart", "end") 
相關問題