将wxPython类中的函数移动到其他线程的最简单方法是什么?

2024-10-03 21:35:56 发布

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

我对Python比较陌生,但我正在用它来实现一些自动化。我对类和内部函数如何与外部函数对话有点问题。我真正的目标是从现有函数中创建一个线程,而不需要重写大部分代码。你知道吗

这是我现在的模型。我有一个超类AppWindow(wx.Frame),其中定义了许多函数。你知道吗

InitUI创建接口并初始化变量。 ProcessComputers联系不同的工作站收集信息。这在很大程度上依赖于我在这个应用程序基于控制台时编写的模块。 还有其他各种杂项。不值得调用的函数。你知道吗

这显然对GUI不利,因为一切都依赖于那些在屏幕刷新和接受事件之前完成的进程。你知道吗

既然ProcessComputer已经与我的UI函数分开了,我想知道,在不必重写和重命名对象和变量的情况下,将这些函数移到单独的线程中最简单的方法是什么?你知道吗

我试过按照建议创建一个新类here。问题是,当我创建两个新类,并将ProcessComputer转移到CountEvent类时,一切都中断了。我无法再更新self.textField从AppWindow我也不能用AppWindow.textField. 新类无法访问我的任何变量。有没有更好的方法将这个函数移到它自己的类中,而不重写当前工作的太多代码?你知道吗

如果不是的话,那么重写ProcessComputer的内部代码的最好方法是什么,这样他们仍然可以使用AppWindow中的其余代码?你知道吗


Tags: 方法函数代码模型目标定义对话线程
1条回答
网友
1楼 · 发布于 2024-10-03 21:35:56

我会把ProcessComputer函数留在它所在的位置,让您的GUI调用它。但是把它的胆量放到一个基于线程的类中的函数中。然后,当您需要更新GUI时,必须调用wxPython的线程安全方法之一:wx.CallAfter公司, wx.稍后或者wx.PostEvent事件. 你知道吗

以下是一些很好的资源:

这就是线程类的外观:

 ########################################################################
class TestThread(Thread):
    """Test Worker Thread Class."""

    #                                   
    def __init__(self, wxObject):
        """Init Worker Thread Class."""
        Thread.__init__(self)
        self.wxObject = wxObject
        self.start()    # start the thread

    #                                   
    def run(self):
        """Run Worker Thread."""
        # This is the code executing in the new thread.
        for i in range(6):
            time.sleep(10)
            amtOfTime = (i + 1) * 10
            wx.PostEvent(self.wxObject, ResultEvent(amtOfTime))
        time.sleep(5)
        wx.PostEvent(self.wxObject, ResultEvent("Thread finished!"))

其余的代码可以类似于第二个链接中的示例。或者您可以使用wiki的第一个链接来查看其他一些方法。你知道吗

相关问题 更多 >