0

我正在尝试运行一个进度对话框,它不仅在计时器上,而且根据上传到服务器的文件的状态进行更新。我不在乎进度条是如何在视觉上表示的,我只是希望它准确反映它正在跟踪的过程。我已经尝试使用while并且ifthread.isAlive()进程运行时这不会给我一个活动栏。这是我正在使用的栏以及被调用的线程的来源。

class ProgBar(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(
            self, None, wx.ID_ANY, "Please wait."
            )
        self.Centre()
        max = 250

        dlg = wx.ProgressDialog(
            "Please wait.", 
            "Please wait while your request is processed.",
            maximum = max,
            parent=self,
            style = wx.PD_CAN_ABORT
            |wx.PD_APP_MODAL
            |wx.PD_AUTO_HIDE
            )

        keepGoing = True
        count = 0

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

            if count >= max / 2:
                (keepGoing, skip) = dlg.Update(count)
            else:
                (keepGoing, skip) = dlg.Update(count)

        dlg.Destroy()

和线程...

def UploadToServer(self, event):
    if PepTalkSource is None:
        dlg = wx.MessageDialog(self,
        "You must attach a Pep Talk file!",
        "Missing Attachments!", wx.OK|wx.ICON_QUESTION)
        result = dlg.ShowModal()
        dlg.Destroy()
    else:
        if os.path.isdir(
        r"\\server\address\goes\here"
        ):
            ThreadOne = FuncThread(CopyMove, ())
            ThreadOne.start()
            dlg = ProgBar()
            ThreadOne.join()
        else:
            dlg = wx.MessageDialog(self,
            "The server could not be reached.  Please visit the Help Menu.",
            "Server Unavailable", wx.OK|wx.CANCEL|wx.ICON_QUESTION)
            result = dlg.ShowModal()
            dlg.Destroy()

我什至试图放弃课程并将对话框直接插入函数中,但没有运气。任何帮助将不胜感激。

4

1 回答 1

1

实际上,本月早些时候我刚刚在我的博客上写过这样的事情:

我认为您需要的是 wx.Gauge 小部件。您可以使用 Python 来确定要上传的文件的大小,并使用该信息来设置仪表的范围。然后你会想在一个线程中进行上传,但要分块。因此,您也会以块的形式读取文件,例如 1024K,然后以相同的块将其写入服务器。每次写入后,您都会更新进度条。

于 2013-09-24T17:33:57.200 回答