2016-05-08 6 views
0

Ich schreibe ein GUI-Programm in Tkinter. Ich versuche, den Inhalt des Text-Widget zu verfolgen, indem Sie Text.get() Methode verwenden.
Ich habe gehört, dass ich bekommen kann (1.0, 'Ende'), um aktuelle Inhalte auf dem Widget geschrieben zu bekommen, aber es gibt nicht den neuesten Charakter Ich tippte.(Gelöst) get() Methode von Tkinter Text Widget - gibt nicht das letzte Zeichen

Dies ist ein einfaches Beispiel, das ich schrieb:

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() 

Wenn ich tippe 'abcd', er druckt 'abc \ n', nicht 'abcd \ n'. ('\ N' wird nach der letzten Zeile des Text-Widget automatisch hinzugefügt.)

example

Wie kann ich 'abcd \ n', anstelle von 'abc \ n' bekommen?

[gelöst]

Dank Bryan Oakley und Yasser Elsayed, löste ich das Problem, indem

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

auf die folgende ersetzt:

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

example2

+1

http://StackOverflow.com/a/11542200/7432 –

+0

@BryanOakley Danke für den Link! Dieser Beitrag hat mir geholfen zu verstehen, wie (...). Bind() in Tkinter funktioniert. – hunminpark

Antwort

2

Dies ist auf das Timing Ihres Ereignishandlers zurückzuführen, das ausgeführt wird, sobald das Ereignis eintritt, was bedeutet, dass das Text-Widget keine Chance hatte, den eingegebenen Schlüssel tatsächlich zu erhalten. Sie haben hier zwei Möglichkeiten, entweder hängen Sie einfach den key Parameter, den Sie in der Ereignisbehandlungsroutine erhalten, an das Text.get() Ergebnis an, oder binden Sie an <KeyRelease-A>, wenn Sie beispielsweise auf einen bestimmten Schlüssel achten (A in diesem Fall).