首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在wxpython中有wx.CallDuring吗?

在wxpython中有wx.CallDuring吗?
EN

Stack Overflow用户
提问于 2011-10-01 00:52:13
回答 1查看 189关注 0票数 0

我在文档中找到了wx.CallAfterwx.CallLater,但两者都解决不了我的问题。我要做的是在执行任务时更新状态栏,但是wx.CallAfterwx.CallLater只在任务之后更新。

示例:

代码语言:javascript
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# generated by wxGlade 0.6.3 on Fri Sep 30 20:55:34 2011

import wx
import time
# begin wxGlade: extracode
# end wxGlade



class MyFrame1(wx.Frame):
    def __init__(self, *args, **kwds):
        # begin wxGlade: MyFrame1.__init__
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.frame_2_statusbar = self.CreateStatusBar(1, 0)

        self.__set_properties()
        self.__do_layout()
        # end wxGlade

    def __set_properties(self):
        # begin wxGlade: MyFrame1.__set_properties
        self.SetTitle("frame_2")
        self.frame_2_statusbar.SetStatusWidths([-1])
        # statusbar fields
        frame_2_statusbar_fields = ["foo"]
        for i in range(len(frame_2_statusbar_fields)):
            self.frame_2_statusbar.SetStatusText(frame_2_statusbar_fields[i], i)
        # end wxGlade

    def __do_layout(self):
        # begin wxGlade: MyFrame1.__do_layout
        self.Layout()
        # end wxGlade
    def Test(self):
    time.sleep(10)
        for i in range(0,100):
        time.sleep(0.1)
        txt="I <3 Stack Exchange x " +str( i)
        wx.CallAfter(self.frame_2_statusbar.SetStatusText,txt, 0)
        wx.CallAfter(self.Update)
        print txt
# end of class MyFrame1


if __name__ == "__main__":
    app = wx.PySimpleApp(0)
    wx.InitAllImageHandlers()
    frame_1 = MyFrame1(None, -1, "")
    app.SetTopWindow(frame_1)
    frame_1.Show()
    wx.CallAfter(frame_1.Test)
    app.MainLoop()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-04 02:24:57

从它的声音来看,"CallDuring“只不过是简单地调用您想要的任何函数。当你叫它的时候,它就会被调用。为什么直接打电话并不能解决你的问题呢?

然而,你是在告诉你的节目睡觉。没有多少“通话期间”会帮助你,因为你把整个应用程序睡觉。也许您认为sleep是“真实”代码的一个很好的模拟,但它不是。您实际上是在告诉您的程序“停止所有处理”,其中包括屏幕更新。

问题的症结在于,您不允许事件循环处理重绘事件。您可以尝试在循环中调用wx.Yield(),但是在GUI程序的主线程中有一个长时间运行的大循环是一种代码嗅探。几乎可以肯定有更好的方法来解决你的问题。

我能给出的最好建议是搜索"wxpython长时间运行任务“。最有可能的是,第一个点击将是一个名为"长时间运行任务“的wxpywiki页面,您可能会发现它很有帮助。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7617414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档