【问题标题】:wxPython manipulate GUI in same programwxPython 在同一程序中操作 GUI
【发布时间】:2014-04-11 09:00:09
【问题描述】:

我正在尝试使用 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.ChangeTitle()

做事

所以基本上我希望能够运行一个 GUI,并稍后在我的程序中控制它(而不是通过带有事件的 GUI 本身)。我打算让图片随机显示。

感谢您的帮助。

-布雷登

【问题讨论】:

    标签: multithreading user-interface process wxpython


    【解决方案1】:

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

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

    要了解有关 wx.Timer 的更多信息,最好从演示开始。还有教程here,视频here。

    (我听说有很多方法可以运行MainLoop in a separate thread,但你提到的都不需要这样做,而且使用计时器会容易得多。)

    【讨论】:

    • 我会试一试,告诉你进展如何
    • 好的。我建议即使它不能很快奏效,你也要坚持下去。与在单独的线程中运行主 GUI 的选项相比,使用计时器的效果确实没有可比性。另外,我对我的答案进行了一些编辑以澄清一些事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    • 2023-04-04
    • 2013-09-13
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多