wxPython在同一程序中操作GUI

时间:2014-03-08 00:21:11

标签: multithreading user-interface process wxpython

我正在尝试使用wxPython创建GUI。在我创建GUI之后,我希望代码继续执行,所以我试图将app.MainLoop()抛到一个新线程上。这给了我一些问题。此外,当我尝试更改背景颜色时,它会冻结GUI。

导入wx 导入线程 来自线程导入线程 来自多处理导入过程

类显示(wx.Frame):

def __init__(self, *args, **kwargs):
    print 'here'
    self.app = wx.App(False)
    super(Display, self).__init__(*args, **kwargs)
    self.SetTitle("Yo mama")
    self.Show(True)
    thread = Thread(target = self.app.MainLoop)
    thread.start()
    self.Close()


def DisplayGUI(self):

    self.SetTitle("MyTitle")
    self.Show(True)

def Changetitle(self):

    self.SetTitle("Title2")

display =显示(无)

做东西

display.ChangeTitle()

做东西

所以基本上我希望能够运行一个GUI,并在我的程序中稍后控制它(而不是通过事件的GUI本身)。我计划随机播放图片。

感谢您的帮助。

-Braeden

1 个答案:

答案 0 :(得分:0)

GUI的MainLoop需要在主线程中运行。这样做,如果您想要随机时间的事件,您可以使用计时器,例如wx.Timer

使用这种方法,您提到的所有更改(显示图片,更改标题,颜色等)应该很简单。此外,您可以通过这种方式获得更多控制权,您可以在此处启动和停止计时器,更改间隔,拥有多个计时器,设置相互触发的计时器以及许多其他选项。

要了解有关wx.Timer的更多信息,一个好的起点始终是演示。还有一个教程here和一个视频here

(我听说有办法运行MainLoop in a separate thread,但你没有提到要求,而且使用计时器会更容易。)