我正在尝试运行一个进度对话框,该对话框不仅仅是在计时器上,而是根据上传到服务器的文件的状态进行更新。我不关心进度条是如何在视觉上表示的,我只是希望它能够准确地反映出它正在跟踪的过程。我尝试在while
上使用if
和thread.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()
我甚至试图抛弃这个类并直接插入对话框而没有运气。任何帮助将不胜感激。
答案 0 :(得分:1)
我本月早些时候在博客上写过这样的事情:
我认为你需要的是wx.Gauge小部件。您可以使用Python来确定要上载的文件的大小,并使用该信息来设置仪表的范围。然后你会想要在一个线程中进行上传,但是要用块。因此,您也将以块的形式读取文件,例如1024K,并将它以相同的块写入服务器。每次写入后,您都会更新进度条。