Python self.after()函数使TKinter程序崩溃

Python self.after()函数使TKinter程序崩溃,python,tkinter,Python,Tkinter,我想让一个程序停止运行一段时间,以节省CPU能耗。我有一个self.after函数,我想运行它,使程序在设定的时间内停止运行。但是,它总是使程序崩溃 self.after(int(self.timeSleep*1000),打印(“睡眠”) 单词sleep.已打印,但窗口崩溃。我认为睡眠。应该在“睡眠”完成后才打印。我不确定我做错了什么,我找不到像这样的问题。如果这是一个愚蠢的错误,请原谅我,因为这是我第一次使用TKinter 提前谢谢 编辑: 我的终端没有收到任何错误。崩溃是指窗口停止响应。您的

我想让一个程序停止运行一段时间,以节省CPU能耗。我有一个self.after函数,我想运行它,使程序在设定的时间内停止运行。但是,它总是使程序崩溃

self.after(int(self.timeSleep*1000),打印(“睡眠”)

单词
sleep.
已打印,但窗口崩溃。我认为
睡眠。
应该在“睡眠”完成后才打印。我不确定我做错了什么,我找不到像这样的问题。如果这是一个愚蠢的错误,请原谅我,因为这是我第一次使用TKinter

提前谢谢

编辑:
我的终端没有收到任何错误。崩溃是指窗口停止响应。

您的代码具有与以下相同的效果:

  • 执行
    打印(“睡眠”)
  • 执行
    self.after(int(self.timeSleep*1000),None)
    这与
    time.sleep(int(self.timeSleep*1000))相同。
您需要将其更改为使用lambda:

self.after(int(self.timeSleep*1000),lambda:print(“sleep”)

我找到了一个解决方案,它不需要使用
self.after
。相反,您可以使用线程来运行此特定方法,允许您使用while循环和time.sleep,而不会使主GUI程序崩溃。

您确定窗口会崩溃吗?不只是睡觉吗?这会导致睡眠不再被打印出来。但是,程序仍然会在每次运行此代码时崩溃。如果我让窗口没有响应足够长的时间,我会得到错误代码
无法分配236字节。不确定发生了什么。self.timeSleep的类型及其值是什么?如果它是一个数字字符串(如
'123'
),则应使用
int(self.timeSleep)*1000而不是
int(self.timeSleep*1000)
。建议的更改不应导致崩溃。它是一个实际的数字,而不是一串数字。我发现我必须执行该特定命令,才能使它与Tkinter.Hmm一起工作。我认为您无法在两个线程和tkinter之间进行通信,这导致了您的新Q。我建议按照acw1668的说明使用
after()