Python(Windows XP)-wx.FileDialog在销毁()后部分保留
我是Python新手(事实上,对PC开发也是新手),我想知道如何在我正在编写的Windows应用程序中正确解决使用FileDialog时遇到的问题 这是我的代码到目前为止的相关部分Python(Windows XP)-wx.FileDialog在销毁()后部分保留,python,wxpython,refresh,destroy,filedialog,Python,Wxpython,Refresh,Destroy,Filedialog,我是Python新手(事实上,对PC开发也是新手),我想知道如何在我正在编写的Windows应用程序中正确解决使用FileDialog时遇到的问题 这是我的代码到目前为止的相关部分 def SelectLogs(self, event): dir = os.getcwd() paths = [] open_dlg = wx.FileDialog(self, message='Select log file', defaultDir=dir, style
def SelectLogs(self, event):
dir = os.getcwd()
paths = []
open_dlg = wx.FileDialog(self, message='Select log file',
defaultDir=dir, style=wx.OPEN | wx.CHANGE_DIR | wx.MULTIPLE)
self.splitter.Refresh(True)
if open_dlg.ShowModal() == wx.ID_OK:
paths = open_dlg.GetPaths()
open_dlg.Destroy()
self.splitter.Refresh()
self.RetrieveLogData(paths)
def RetrieveLogData(self, paths):
count = 0
loglines = []
self.tc2.WriteText('Loading selected logs...')
paths.sort()
for log in paths:
read_data = []
f = open(log, 'r')
self.tc2.WriteText('\r\n ' + log)
read_data = f.readlines()
f.close()
count = count + 1
for line in read_data:
loglines.append(line)
self.tc1.WriteText(line)
self.tc2.WriteText('\r\nCompleted loading ' + str(count) + ' log(s)')
我的问题是,即使我调用open_dlg.Destroy()和self.splitter.Refresh(),我仍然在wx.TextCtrl(tc2)对象的下半部分显示文件对话框的剩余部分(tc1在拆分器的上半部分,tc2在下半部分)
一旦文件被完全加载并在tc1中显示内容,tc2就会像我所期望的那样刷新和显示
我尝试在tc1和tc2上调用刷新方法,而不是在拆分器上调用,但这似乎没有任何效果
欢迎提出任何有用的建议。谢谢。您不需要调用
Refresh()
,这些都不会起作用。GUI冻结的原因是不同的。回调函数运行时间过长,会阻塞GUI线程
在不创建新线程的情况下,绝不能在回调函数中运行任何可能需要几毫秒以上时间的任务
您应该为长时间运行的任务创建一个新线程。我建议使用
wx.lib.delayedresult
和wx.CallAfter
,因为它们是最方便的。关于这个话题,有很多问题/答案。例如:非常感谢您的帮助-我将阅读您推荐的解决方案,并在我的应用程序中实施它们。