当前位置:  开发笔记 > 编程语言 > 正文

Tkinter:在主循环中调用事件

如何解决《Tkinter:在主循环中调用事件》经验,为你挑选了2个好方法。

你如何event从一个单独的对象调用tkinter ?

我正在寻找像wxWidgets这样的东西wx.CallAfter.例如,如果我创建一个对象,并将其传递给我的Tk根实例,然后尝试从我的对象调用该根窗口的方法,我的应用程序将锁定.

我能想到的最好的after方法是使用方法并从我的单独对象中检查状态,但这似乎很浪费.



1> Bryan Oakley..:

要回答您的具体问题"如何从单独的对象调用TkInter事件",请使用该event_generate命令.它允许您将事件注入根窗口的事件队列.结合Tk强大的虚拟事件机制,它成为一种方便的消息传递机制.

例如:

from tkinter import *

def doFoo(*args):
    print("Hello, world")

root = Tk()
root.bind("<>", doFoo)

# some time later, inject the "<>" virtual event at the
# tail of the event queue
root.event_generate("<>", when="tail")

请注意,event_generate呼叫将立即返回.目前尚不清楚这是不是你想要的.一般来说,您不希望基于事件的程序阻止等待对特定事件的响应,因为它将冻结GUI.

我不确定这是否能解决你的问题; 没有看到你的代码,我不确定你的真正问题是什么.例如,我可以在传入根的对象的构造函数中访问root的方法,而不会锁定应用程序.这告诉我你的代码中还有其他的东西.

以下是从其他对象成功访问根窗口上的方法的示例:

from tkinter import *

class myClass:
    def __init__(self, root):
        print("root background is %s" % root.cget("background"))

root = Tk()
newObj = myClass(root)



2> user110954..:

下面只是一些文档和链接,以更好地了解上面的布莱恩的答案.

功能描述来自新墨西哥州技术:

w.event_generate(sequence, **kw)

此方法会导致事件在没有任何外部刺激的情况下触发.事件的处理与外部刺激触发的情况相同.sequence参数描述了要触发的事件.您可以通过提供keyword = value参数为Event对象中的选定字段设置值,其中关键字指定Event对象中字段的名称.

列表的Tcl/Tk事件的描述属性在这里

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有