[英]get() method of Tkinter text widget - doesn't return the last character
我正在Tkinter中編寫一些GUI程序。 我正在嘗試使用Text.get()方法來跟蹤Text小部件的內容。
我聽說我可以get(1.0,'end')來將當前內容寫在小部件上,但是它不提供我鍵入的最新字符。
這是我寫的一個簡單示例:
import Tkinter as tk
class TestApp(tk.Text, object):
def __init__(self, parent = None, *args, **kwargs):
self.parent = parent
super(TestApp, self).__init__(parent, *args, **kwargs)
self.bind('<Key>', self.print_contents)
def print_contents(self, key):
contents = self.get(1.0, 'end')
print '[%s]' % contents.replace('\n', '\\n')
if __name__ == '__main__':
root = tk.Tk()
app = TestApp(root, width = 20, height = 5)
app.pack()
root.mainloop()
如果輸入“ abcd”,它將顯示“ abc \\ n”,而不是“ abcd \\ n”。 (“ \\ n”由“文本”小部件自動添加到最后一行之后。)
如何獲得“ abcd \\ n”而不是“ abc \\ n”?
[解決了]
感謝Bryan Oakley和Yasser Elsayed ,我通過替換解決了問題
self.bind('<Key>', self.print_contents)
到以下內容:
self.bind('<KeyRelease>', self.print_contents)
這是由於事件處理程序的時間安排,事件處理程序會在事件發生后立即執行,這意味着“文本”小部件尚沒有機會真正獲得鍵入的鍵。 您在此處有兩個選擇,或者只是將在事件處理程序中獲得的key
參數附加到Text.get()
結果中,或者將其綁定到<KeyRelease-A>
,例如,如果您正在偵聽特定的key(在本例中為A
案件)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.