我有一个进程从目录中获取文件并将它们放入列表中。然后它循环迭代该列表。循环的最后一行是它应该更新我的 gui 显示的位置,然后它再次从列表中的下一项开始循环。
我的问题是,在整个过程完成之前,它实际上不会更新 gui,这取决于列表的大小,可能需要 30 秒到一分钟多。这给人一种程序被“挂起”的感觉
我想要它做的是处理列表中的一行,更新 GUI,然后继续。我哪里做错了?更新列表的行是#用驱动器内容填充列表视图。打印语句仅用于调试。
def populateList(self):
print "populateList"
sSource = self.txSource.Value
sDest = self.txDest.Value
# re-intialize listview and validated list
self.listView1.DeleteAllItems()
self.validatedMove = None
self.validatedMove = []
#Create list of files
listOfFiles = getList(sSource)
#prompt if no files detected
if listOfFiles == []:
self.lvActions.Append([datetime.datetime.now(),"Parse Source for .MP3 files","No .MP3 files in source directory"])
#Populate list after both Source and Dest are chosen
if len(sDest) > 1 and len(sDest) > 1:
print "-iterate listOfFiles"
for file in listOfFiles:
sFilename = os.path.basename(file)
sTitle = getTitle(file)
sArtist = getArtist(file)
sAlbum = getAblum(file)
# Make path = sDest + Artist + Album
sDestDir = os.path.join (sDest, sArtist)
sDestDir = os.path.join (sDestDir, sAlbum)
#If file exists change destination to *.copyX.mp3
sDestDir = self.defineDestFilename(os.path.join(sDestDir,sFilename))
# Populate listview with drive contents
self.listView1.Append([sFilename,sTitle,sArtist,sAlbum,sDestDir])
#populate list to later use in move command
self.validatedMove.append([file,sDestDir])
print "-item added to SourceDest list"
else:
print "-list not iterated"
这是 GUI 程序的常见问题。在接收并处理“重绘”命令之前,控件不会更新,并且在函数返回之前不会发生这种情况。
您可以通过调用控件来强制控件随时重新绘制Update http://www.wxpython.org/docs/api/wx.Window-class.html方法,如这个问题的答案所示:如何强制刷新 wx.Panel? https://stackoverflow.com/questions/1230630/how-do-you-force-refresh-of-a-wx-panel
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)