簡體   English   中英

Tkinter文本小部件的get()方法-不返回最后一個字符

[英]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 OakleyYasser Elsayed ,我通過替換解決了問題

self.bind('<Key>', self.print_contents)

到以下內容:

self.bind('<KeyRelease>', self.print_contents)

例子2

這是由於事件處理程序的時間安排,事件處理程序會在事件發生后立即執行,這意味着“文本”小部件尚沒有機會真正獲得鍵入的鍵。 您在此處有兩個選擇,或者只是將在事件處理程序中獲得的key參數附加到Text.get()結果中,或者將其綁定到<KeyRelease-A> ,例如,如果您正在偵聽特定的key(在本例中為A案件)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM