【发布时间】:2011-01-28 07:39:00
【问题描述】:
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
在 tkinter 中处理 gui 我对事件处理程序的运行顺序有点困惑。如果你运行上面的代码,你会希望看到...
1) 编辑文本小部件会触发事件处理程序,但它似乎会在没有注册实际更改的情况下触发它, 2)即使文本小部件被清除(即,继续按 BackSpace)它似乎仍然有一个字符长度的字符串, 3) 输出小部件仅在触发 NEXT 事件触发器时接收其更新,尽管数据来自上一个事件。
这只是绑定在 tkinter 中的工作方式还是我在这里遗漏了什么?
更新输入小部件时我想要的行为是: 1)显示变化, 2)输入事件处理程序, 3)更新输出小部件, 4) 显示消息框。
【问题讨论】:
标签: python user-interface events tkinter