如何线程wxPython progress b

2024-09-27 07:26:55 发布

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

我在试着穿线wx.progress对话框. 我上了一节螺纹课程

class Progress(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
    def run(self):
        max = 1000000

        dlg = wx.ProgressDialog("Progress dialog example",
                               "An informative message",
                               maximum = max,
                               parent=None,
                               style = wx.PD_CAN_ABORT
                                | wx.PD_APP_MODAL
                                | wx.PD_ELAPSED_TIME
                                | wx.PD_ESTIMATED_TIME
                                | wx.PD_REMAINING_TIME
                                )
        keepGoing = True
        count = 0

        while keepGoing and count < max:
            count += 1
            wx.MilliSleep(250)

            if count >= max / 2:
                (keepGoing, skip) = dlg.Update(count, "Half-time!")
            else:
                (keepGoing, skip) = dlg.Update(count)
        dlg.Destroy()

当我按下按钮

^{pr2}$

当我运行thread1.start()时,我收到了100个2012-12-01 00:31:19.215 Python[3235:8807] *** __NSAutoreleaseNoPool(): Object 0x11a88f300 of class NSConcreteAttributedString autoreleased with no pool in place - just leaking 类型的警告,并且进度条不显示。在

如何使用wxPython线程来生成进度条?在


Tags: selftimeinitdefcountthreadmaxclass
2条回答

它似乎在抱怨参数4不是wxWindow(因此是错误的argument 4 of type 'wxWindow *'部分)。在

查看您的调用,参数4正在传递parent=self。那么,什么是self?换句话说,包含此代码的方法属于哪个类?它是一个wx.Window或一个的子类,还是像Application或{}这样的东西?在

(实际上,假定你将^ {< CD7>}作为关键字参数,这恰巧是在调用^ {<8CD>}构造函数的第四个位置,也在第四个位置调用底层C++函数,这就是实际抱怨的内容。如果切换maximumparent,也会得到同样的错误,我想它还是会说argument 4,而不是{}。)

要验证这一点,请尝试去掉失败调用中的parent=self,它应该可以工作,或者将parent=object()添加到调用中,只要None起作用,它就会失败。在

当然,这并不能真正解决问题。但要做到这一点,您必须弄清楚您希望parent是什么,并传递它而不是{}。在

另外,我不认为这个问题和你的线程有关。在

所有wxPython小部件和操作都应该在一个线程中。如果你想让一个对话由另一个线程控制,那么你就必须使用定时器和队列从另一个线程来给这个对话框发消息。在

我理解的另一种方法应该是工作的(我没有测试过这个),它在另一个线程中为您的对话框创建一个完全独立的wxApp。你仍然需要以某种方式与主线程通信。在

编辑: 这里是更多信息的链接。它的底部有一些关于使用的信息wx.CallAfter公司更新工作线程的进度。它还演示了如何在一个单独的线程中运行单个函数,而不创建单独的类。在

wxPython Threading

相关问题 更多 >

    热门问题