wxPython-如何强制用户界面刷新?

2024-10-02 02:27:01 发布

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

我把问题归结为本文中的示例代码。请注意,我没有调用app.MainLoop(),因为这不是一个交互式窗口;我希望它在开始时弹出,在工作进行时显示一些进度条,并在完成时消失。

我对wxPython和wx.Yield()的(有限的)理解使我相信,在一些UI工作之后调用wx.Yield()会将这些更改刷新到显示中。这并没有发生——当我运行这个脚本时,会出现一个灰色的框,其中应该有“Hello World”。

我做错什么了?

import wx

class MyFrame(wx.Frame):
    def __init__(self, parent, id):
        wx.Frame.__init__(self, parent, id, size=(400,400))
        self.panel = wx.Panel(self, -1)
        wx.StaticText(self.panel, -1, "Hello World", (20,20))
        wx.Yield()


class MyApp(wx.App):
    def OnInit(self):
        self.frame = MyFrame(None, -1)
        self.frame.Show(True)
        self.SetTopWindow(self.frame)
        return True


def run():
    app = MyApp(redirect=False)
    import time; time.sleep(5)

run()

Tags: importselfidapphelloworldinitdef
3条回答

如果没有MainLoop,则不会触发任何事件,而且.Refresh也不会工作。

我想wxSplashscreen可能就是你要找的。示例:http://wiki.wxpython.org/SplashScreen

您需要定期生成或更新,这样当您的OS/windows管理器向您的应用程序发送重绘消息时,它就可以处理这些消息。我对wxPython不是百分之百的确定,因为我最近没有使用它,但是我认为如果没有主循环来适当地处理消息,您就做不到您想要的事情。

不过,您可能会在这里找到一些有关主循环线程的有用信息(以及解释主循环为何重要):http://wiki.wxpython.org/MainLoopAsThread

而不是wx.Yield()

只需调用self.Update()

相关问题 更多 >

    热门问题