wxGenericDirCtrl / MouseEvents / ProgressDialog

Plattformunabhängige GUIs mit wxWidgets.
Antworten
BugsBunny1113
User
Beiträge: 9
Registriert: Dienstag 22. November 2005, 22:18
Wohnort: Germany

Hallo Python Gemeinde,

Hab ein Problem, dass mich jetzt schon ein Weilchen beschäftigt und hoffe, dass mir hier geholfen werden kann. Folgendes:

In meinem wxPython-Script wird eine GenericDirCtrl als eine Art FileBrowser verwendet. Problematisch allerdings, dass die MouseEvents in Boa (und auch von Hand) einfach nicht funktionieren wollen.

Habe mich hier mal mit der Suchfunktion beschäftigt und bin auf folgendes gestossen, was mir zumindest teilweise weiterhilft:

tree = self.uf_browser.GetTreeCtrl()
tree.Bind(wx.EVT_TREE_ITEM_ACTIVATED, lambda x:
self.OnActivate(x,self.uf_browser.GetPath()))

In der OnActivate Funktion werden nun abhängig von der Dateiendung verschiedene Dinge ausgeführt, wie z.B. das Einlesen von Daten mit anschliessender Übertragung in eine normale ListCtrl, was auf diese Weise auch funktioniert.

Bei einer bestimmten Endung soll die entsprechende Datei in .csv-Dateien umgewandelt werden, wobei ein ProgressDialog mitläuft. Das Generieren der Dateien funktioniert noch ohne Fehler, anschließend stürzt in 95% aller Fälle das Script mitsamt Boa und Python ab. Nix zu machen?!

Wenn ich die gleiche Funktion über ein Menüevent aufrufe läuft das Script normal weiter, kann also nicht an der Generierung selber liegen...

Ein ähnliches Phänomen passiert sobald ich andere (zusätzliche) Events mit dem tree verbinde, wie z.B.:

tree.Bind(wx.EVT_TREE_SEL_CHANGED, lambda x:
self.OnSelChanged(x,self.uf_browser.GetPath()))

Das Script läuft weiter und reagiert auch wie erwartet. Will man das Script allerdings schließen, so bleibt ein Frame (welches genau hinter der Anwendung liegt) über. Keine Ahnung wo das herkommt???

Wäre euch wirklich sehr dankbar, wenn ihr mir helfen könntet. Hat jemand vieleicht schon ähnliche Erfahrungen mit der GenericDirCtrl machen können?

Besten Dank im Voraus...
Gast

Hier zur Ansicht der Code der OnActivate. Der i2u-Teil funktioniert ohne Probleme, der ldf-teil läuft, jedoch anschliessend verabschiedet sich das Programm und kann nur noch über den Task-Manager beendet werden.

Code: Alles auswählen

def OnActivate(self, evt, p):
        pfad = p
        if (os.path.isfile(pfad)):
            datei = os.path.basename(pfad)
            temp_list = string.split(datei,".")
            
            if (temp_list[len(temp_list)-1]) == "i2u":  #i2u - Dateien
                if (self.control.get_int_box != []):    #Box loeschen
                    self.int_ctrl.DeleteAllItems()
                    self.control.clear_int_box()               
                (data, fehler) = self.control.fill_integral_box(pfad)
                if (fehler==None):
                    for data_tupel in data:
                        self.int_ctrl.Append(data_tupel)                          
                else:
                    self.feeder_message(fehler) 
                
            if (temp_list[len(temp_list)-1]) == "ldf":  #ldf - Dateien
                groesse = self.control.filesize(pfad)
                max = int(groesse + (groesse * 1.13))
                prg_dlg = wx.ProgressDialog("Integral Lastflussdaten entpacken",
                               "Lastflussdatei (.ldf) wird eingelesen...",
                               max,
                               parent=self,
                               style = wx.PD_APP_MODAL
                                | wx.PD_ELAPSED_TIME
                                | wx.PD_ESTIMATED_TIME
                                | wx.PD_REMAINING_TIME) 
                try:
                    l2c = ldf_2_csv(pfad, prg_dlg, self.uf_browser)                            
                    l2c.go()
                    self.uf_browser.ReCreateTree()
                    del l2c
                except:
                    self.feeder_message(1)
                prg_dlg.Update(max,"READY")
        else:
            pass      
        evt.Skip()

Edit (Leonidas): Code in Python-Tags gesetzt.
Antworten