python gui events out of order
Posted
by dave
on Stack Overflow
See other posts from Stack Overflow
or by dave
Published on 2010-03-16T20:49:23Z
Indexed on
2010/03/16
20:51 UTC
Read the original article
Hit count: 267
from Tkinter import *
from tkMessageBox import *
class Gui:
def __init__(self, root):
self.container = Frame(root)
self.container.grid()
self.inputText = Text(self.container, width=50, height=8)
self.outputText = Text(self.container, width=50, height=8, bg='#E0E0E0', state=DISABLED)
self.inputText.grid(row=0, column=0)
self.outputText.grid(row=0, column=1)
self.inputText.bind("<Key>", self.translate)
def translate(self, event):
input = self.inputText.get(0.0, END)
output = self.outputText.get(0.0, END)
self.outputText.config(state=NORMAL)
self.outputText.delete(0.0, END)
self.outputText.insert(INSERT, input)
self.outputText.config(state=DISABLED)
showinfo(message="Input: %s characters\nOutput: %s characters" % (len(input), len(input)))
root = Tk() #toplevel object
app = Gui(root) #call to the class where gui is defined
root.mainloop() #enter event loop
Working on a gui in tkinter I'm a little confused as to the sequence the event handlers are run. If you run the above code you'll hopefully see...
1) Editing the text widget triggers the event handler but it seems to fire it off without registering the actual change, 2) Even when the text widget is cleared (ie, keep pressing BackSpace) it still seems to have a one character length string, 3) The output widget only receives its update when the NEXT event trigger is fired despite the fact the data came on the previous event.
Is this just how bindings work in tkinter or am i missing something here?
The behaviour i would like when updating the input widget is: 1) Show the change, 2) Enter event handler, 3) Update output widget, 4) Show message box.
© Stack Overflow or respective owner