Ich bin neu in Python (und in der Tat neu in der PC-Entwicklung) und würde gerne wissen, wie ich ein Problem mit FileDialog richtig lösen soll in einer Windows-Anwendung ich schreibe ...Python (Windows XP) - Wx.FileDialog bleibt teilweise nach Destroy()
Hier ist der relevante Teil meiner Code ist so weit ...
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)')
Mein Problem ist, dass, obwohl ich nenne open_dlg.Destroy() und selbst. splitter.Refresh() Ich habe immer noch Reste des FileDialogs, die über dem unteren meiner wx.TextCtrl (tc2) Objekte angezeigt werden (tc1 ist in der oberen Hälfte des Splitters und tc2 in der unteren Hälfte).
Sobald die Datei (en) vollständig geladen sind und der Inhalt in tc1 angezeigt wird, wird tc2 aktualisiert und wie erwartet angezeigt.
Ich habe versucht, die Refresh-Methoden auf tc1 und tc2 statt auf dem Splitter aufzurufen, aber das scheint keine Wirkung zu haben.
Alle nützlichen Vorschläge sind willkommen. Vielen Dank.
Vielen Dank für Ihre Hilfe - ich werde die von Ihnen empfohlenen Lösungen lesen und sie in meiner Anwendung implementieren. –