首页 / PYTHON / python gui事件乱序
python gui事件乱序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python gui事件乱序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2779字,纯文字阅读大概需要4分钟。
内容图文
![python gui事件乱序](/upload/InfoBanner/zyjiaocheng/710/9e29d617b4d044368e0eff025106947d.jpg)
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)显示消息框.
解决方法:
这就是绑定的工作方式(这是一件好事),但您的问题很容易解决.
绑定按窗口小部件绑定标记(也称为绑定标记或绑定标记)指定的顺序触发.除非您另行指定,否则绑定按以下顺序发生:
>如果在窗口小部件上直接绑定,它将在任何其他绑定之前触发.
>如果小部件的类有绑定,则接下来会触发它
>如果在包含窗口小部件的顶层窗口小部件上存在绑定,则会在下一次触发它(注意:在此上下文中,根窗口被视为顶层窗口)
>如果对“全部”有约束力,它将接下来开火.
可以通过其中一个事件处理程序在任何点停止序列,但这不是针对此特定讨论的要点.
在默认情况下,您对< Key>的绑定在类绑定之前发生,它是文本实际插入窗口小部件的类绑定.这就是为什么你的绑定似乎总是落后一个角色.
通常,这种顺序是完全正确的,因为更具体的绑定有机会覆盖默认行为.如果不是这样的话,即使你不想要它也总是会得到默认行为.当你想要扩充默认绑定而不是替换默认绑定时,这并不总是你想要的地方.
您可以交换bindtags的顺序,以便首先发生类绑定.或者,在文本窗口小部件中添加一个额外的绑定标签,并在类绑定后将其添加到序列中,并绑定到该窗口小部件.通常添加绑定标签是更好的解决方案,但并非总是如此.
要更改bindtags,您可以执行以下操作:
self.inputText.bindtags(((str(self.inputText)), "Text", "post-insert", ".", "all"))
要绑定到“post-insert”,请使用bind_class方法:
self.inputText.bind_class("post-insert", "<Key>", self.translate)
它可能看起来很奇怪,但bindtags是最强大的绑定机制之一.它们为您提供对绑定顺序的完全和完全控制,这对于任何其他工具包来说都要困难得多.
顺便说一句,不要忘记,如果你把所有的字符都放到文本小部件的末尾,那么最后总会有一个额外的换行符.要么结束1c,要么修剪文本中的一个换行符.
内容总结
以上是互联网集市为您收集整理的python gui事件乱序全部内容,希望文章能够帮你解决python gui事件乱序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。