wxPython:使用EVT_IDLE

2024-10-01 17:35:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我为EVT_IDLE定义了一个处理程序,它为我执行某个后台任务。(该任务是从几个进程中获取已完成的工作,并将其集成到某个对象中,从而在GUI中进行可见的更改。)

问题是当用户不移动鼠标或做任何事情时,EVT_IDLE不会被多次调用。我希望这个处理程序一直在工作。所以我尝试在处理程序的末尾调用event.RequestMore()。工作,但现在它需要大量的CPU。(我猜这只是在这个任务上循环过度。)

我愿意限制每秒执行任务的次数;我该怎么做?在

或者你还有别的解决办法吗?在


Tags: 对象用户event处理程序定义进程guicpu
2条回答

这听起来像是wxTimerEvent而不是wxIdleEvent的用例。当有处理做电话时wxTimerEvent.开始(). 没什么事的时候,打电话给我wxTimerEvent。停()并从EVT\u TIMER调用方法进行处理。在

(注释:我从WxWigGHETs使用C++,对WxPython不熟悉,但我假设它们有类似的API)

像这样(最多每秒执行一次):

...

def On_Idle(self, event):
    if not self.queued_batch:
        wx.CallLater(1000, self.Do_Batch)
        self.queued_batch = True

def Do_Batch(self):
    # <- insert your stuff here
    self.queued_batch = False

...

哦,别忘了准备自排队批处理在构造函数中设置为False,并可能调用event.RequestMore事件()在某种程度上处于空闲状态。在

相关问题 更多 >

    热门问题