Python 未处理按钮事件

Python 未处理按钮事件,python,python-2.7,tkinter,Python,Python 2.7,Tkinter,我正在将多年前用Perl编写的一个模拟移植到Python中,当我单击STOP按钮时,我遇到了一个停止主模拟循环的问题 工作原理: 我画了一个画布,一个跑步按钮和一个停止按钮。“运行”按钮启动模拟,“停止”按钮停止模拟。单击停止按钮时,STOP()函数将全局标志Run_-sim设置为0,并在Run_-sim!=停止: 我知道正在调用stop()函数,并在模拟未运行时设置Run\u sim标志,因为我在添加模拟循环代码之前对其进行了测试 但是,当模拟循环运行时,单击停止按钮时会显示事件未被处理,并且

我正在将多年前用Perl编写的一个模拟移植到Python中,当我单击STOP按钮时,我遇到了一个停止主模拟循环的问题

工作原理: 我画了一个画布,一个跑步按钮和一个停止按钮。“运行”按钮启动模拟,“停止”按钮停止模拟。单击停止按钮时,
STOP()
函数将全局标志
Run_-sim
设置为0,并在Run_-sim!=停止:

我知道正在调用
stop()
函数,并在模拟未运行时设置
Run\u sim
标志,因为我在添加模拟循环代码之前对其进行了测试

但是,当模拟循环运行时,单击停止按钮时会显示事件未被处理,并且直到从终端输入I Ctrl-C后才会调用
STOP()
函数

有关于如何解决这个问题的建议吗

我删除了不适用于此的代码

import sys
from Tkinter import *
import math
import time
import tkMessageBox


def stop():
    global Run_sim
    Run_sim = STOP

    ###############
    #  main part of simulation
    ###############

    def display_cluster():

       while Run_sim != STOP:
                 .
                 .
                 .
           bunch of code here
                 .
                 .
                 .

       # end while Run_sim

    # end display_cluster()

    stop_button = Button(button_frame, text="Stop", fg="red", command = stop)
    stop_button.pack(side = 'left')

display\u cluster
是否在主线程中运行?如果是这样,您可能会阻止事件循环在
循环运行时为任何事件提供服务。
display\u cluster()
的执行可能会阻止tkinter自己的
mainloop()
运行,这将“挂起”GUI。防止这种情况的最简单方法是让
display\u cluster()
”定期调用通用小部件方法以允许处理用户事件。我尝试添加window.update\u idletasks()作为模拟循环中的第一行,它不起作用,但当我ctl-C时,它停止了,我可以看到我在画布上写的东西,这是我以前看不到的。mainloop()是主要的GUI处理循环。我是否正确调用了该方法,或者需要在何处执行更多设置?当我尝试使用window.update()而不是window.update_idletasks()时,它开始工作。它实际上也解决了我的另一个问题。所以我可以走了。谢谢你的小费。我很感激。