当前位置: 首页 > 面试题库 >

Python-如何在Tkinter的事件循环中运行自己的代码?

上官高翰
2023-03-14
问题内容

对于他的Science Fair项目,他正在模拟天空中一群鸟。他得到了大部分他写的代码,它工作得很好,但鸟儿需要移动的每一刻。

然而,Tkinter浪费了自己的事件循环的时间,因此他的代码无法运行。这样root.mainloop()运行,运行,并保持运行,并且它运行的唯一事情是事件处理程序。

有没有一种方法可以让他的代码与mainloop一起运行(没有多线程,这很令人困惑,应该保持简单),如果这样,那是什么?

现在,他想出了一个丑陋的方法,将其move()功能绑定到<b1-motion>,这样,只要按住按钮并摇动鼠标,它就可以工作。但是必须有一个更好的方法。


问题答案:

afterTk对象上使用方法:

from tkinter import *

root = Tk()

def task():
    print("hello")
    root.after(2000, task)  # reschedule event in 2 seconds

root.after(2000, task)
root.mainloop()

这是该after方法的声明和文档:

def after(self, ms, func=None, *args):
    """Call function once after given time.

    MS specifies the time in milliseconds. FUNC gives the
    function which shall be called. Additional parameters
    are given as parameters to the function call.  Return
    identifier to cancel scheduling with after_cancel."""


 类似资料:
  • 问题内容: 如何从单独的对象调用tkinter ? 我在寻找类似wxWidgets的东西。例如,如果我创建一个对象,并将其根实例传递给它,然后尝试从我的对象中调用该根窗口的方法,则我的应用程序将锁定。 我能想到的最好的方法是使用该方法并从单独的对象检查状态,但这似乎很浪费。 问题答案: 要回答“如何从单独的对象调用TkInter事件”这一特定问题,请使用命令。它允许您将事件注入到根窗口的事件队列中

  • 问题内容: 我希望代码在后台运行并定期更新我的GUI。我该怎么做? 例如,假设我想在GUI代码的背景中执行以下操作,如下所示: 这是GUI代码: 问题答案: 尚不清楚顶部的代码应该做什么,但是,如果只想每秒(或每秒钟)调用一个函数,则可以使用该方法。 因此,如果您只想使用进行操作,则可能需要执行以下操作: 您可以将此函数作为您类的方法(在本例中称为),您的代码将如下所示:

  • 问题内容: 我有以下5个文件: gui.py functions.py 线程处理程序 variables.py 和start.py 执行start.py之后,我收到消息:“ QCoreApplication:exec:事件循环已在运行 ” 我发现,这与计时器有关 从 start.py 和功能 在 functions.py中 有人可以向我解释问题是什么吗?我不知道代码有什么问题… 问题答案: 我认为

  • 我试图在Spyder中创建代码以启动discord bot,但遇到以下错误: 回溯(最近一次呼叫最后一次): 文件“”,第1行,在runfile中('C:/Users/Nathan/Desktop/HW/Python stuff/my_discord\u bot.py',wdir='C:/Users/Nathan/Desktop/HW/Python stuff') 文件“C:\ProgramDat

  • 问题内容: 我正在尝试解决此错误:在我的异步过程中。我相信这是因为在任务仍未完成时发生故障,然后尝试关闭事件循环。我以为我需要在关闭事件循环之前等待其余的响应,但是我不确定如何在我的特定情况下正确完成该操作。 我该如何处理错误并正确关闭事件循环,以便可以启动一个新程序并从本质上重新启动整个程序并继续。 编辑: 根据这个答案,这就是我现在正在尝试的方法。不幸的是,这种错误很少发生,因此,除非我可以强

  • 基本上,我正在Python中的一个订阅计数器应用程序的“草案”上工作。我使用YouTube数据API从YouTube获取数据,然后循环这段代码以更新订阅者计数。但是由于我的GUI代码在循环之后,它永远不会开始,因为循环是无限的,永远不会结束。我尝试将GUI部分放在代码之前,以获得子计数,但没有定义任何变量,因此返回错误。所以基本上,我的问题是如何重新组织它,使其工作,子计数在GUI中更新。我听说过