Events 如何使用另一个*.py文件中的运行时数据流更新Wxpython状态栏

Events 如何使用另一个*.py文件中的运行时数据流更新Wxpython状态栏,events,wxpython,runtime,statusbar,python-multithreading,Events,Wxpython,Runtime,Statusbar,Python Multithreading,我的项目有很多python文件,现在的问题是,当我点击主界面中的按钮时,它会调用另一个python文件(子程序)中的一些函数,我需要子程序中的所有运行状态也会在主界面中更新,我如何做到这一点? 到目前为止,我知道我可以尝试使用socket,但我想知道你们在这方面还有什么好主意吗? 代码如下所示: 1.主用户界面: import wx,time from threading import Thread from path import basicTest EVT_RESULT_ID = wx.Ne

我的项目有很多python文件,现在的问题是,当我点击主界面中的按钮时,它会调用另一个python文件(子程序)中的一些函数,我需要子程序中的所有运行状态也会在主界面中更新,我如何做到这一点? 到目前为止,我知道我可以尝试使用socket,但我想知道你们在这方面还有什么好主意吗? 代码如下所示: 1.主用户界面:

import wx,time
from threading import Thread
from path import basicTest
EVT_RESULT_ID = wx.NewId()
def EVT_RESULT(win, func):
  win.Connect(-1, -1, EVT_RESULT_ID, func)
class ResultEvent(wx.PyEvent):
  def __init__(self, data):
    wx.PyEvent.__init__(self)
    self.SetEventType(EVT_RESULT_ID)
    self.data = data
class TestThread(Thread):
  def __init__(self, wxObject):
    Thread.__init__(self)
    self.wxObject = wxObject
    self.start()
  def run(self):
这个屏蔽子脚本可以运行,但我想做的是用从另一个python文件调用来替换它
  • 子脚本:
  • 导入时间
    类basicTest():
    def运行(自身、内部):
    对于范围内的i(内部):
    返回i
    时间。睡眠(1)


    正如上面的列表,我也知道主UI只有在子脚本完成时才会更新,它不是来自另一个子脚本的运行时刷新,任何人都可以帮助我,非常感谢我将长时间运行的代码留在它的线程中。然后你可以让wxPython启动线程。在线程的
    run
    方法中,只需使用wxPython的线程安全方法之一来调用UI。我建议使用
    wx.CallAfter
    或“wx.PostEvent”

    完成后,您只需在主UI中执行必要的方法

    '''
        for i in range(6):
          time.sleep(1)
          wx.PostEvent(self.wxObject, ResultEvent(i))
    '''
        data = basicTest().run(10)
        wx.PostEvent(self.wxObject, ResultEvent(data))
    
    class MyForm(wx.Frame):
      def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, "Tester")
        panel = wx.Panel(self, wx.ID_ANY)
        self.btn = wx.Button(panel, label="Start Test")
        self.statusbar = self.CreateStatusBar()
        self.btn.Bind(wx.EVT_BUTTON, self.onButton)
        EVT_RESULT(self, self.updateStatus)
      def onButton(self, event):
        TestThread(self)
        btn = event.GetEventObject()
        btn.Disable()
      def updateStatus(self, msg):
        t = msg.data
        self.statusbar.SetStatusText("Sequence %i running.." %t)
        self.btn.Enable()
    if __name__ == "__main__":
      app = wx.PySimpleApp()
      frame = MyForm().Show()
      app.MainLoop()