Problem mit os.path.walk

Plattformunabhängige GUIs mit wxWidgets.
Antworten
sylenz
User
Beiträge: 19
Registriert: Dienstag 21. Juli 2009, 05:12

Guten Morgen miteinander,
ich bin schon seit einer Weile dabei, testweise, in einem wxPython-Projekt eine Ordnerstruktur in einem Textfeld ausgeben zu lassen.
Leider ist mir das mit os.path.walk mal überhaupt nicht gelungen.
Wenn ich meine Funktion allerdings in einem "normalen" Python-Projekt starte und ausführe funktioniert das ganze wunderbar.
Was mich zu der Frage führt ob das ganze irgendwas spezifisch mit wxPython zu tun hat, allzu komplex ist der Quelltext ja nicht ...
Das ganze ist eine wirklich einfachste Verwendung von os.path.walk und sieht so aus (aus dem Gedächnis getippt):

Code: Alles auswählen

import os
def testWalk(arg,dir,files):
   for file in files:
      self.textControl.write('\n'+file)
      #Alternativ für nicht wxPython
      #print file

path = "d:\\"
os.path.walk(path,testWalk,None)
Vielleicht kann mir hier ja jemand helfen :-)
Danke
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Naja, irgendwas muss halt an der Art, wie du das in wx einbaust, nicht in Ordnung sein, das kann man ohne den Code schlecht sagen. Ich nehme mal an, die Methode die du aufrufst ist WriteText? Der Teufel steckt im Detail, da kann man mit so ungefaehren Angaben nicht viel anfangen...

Im Allgemeinen wuerde ich dir empfehlen, die Ausgabe deiner Walk-Funktion erstmal zu sammeln und dann, nach Ablauf, komplett auszugeben (Listen + join boete sich da an).

Ansonsten gibt's natuerlich auch besserer Widgets, um Dateistrukturen darzustellen, die wx-Demo macht genau dieses in ihrem MVC-Tree-Beispiel.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Also dieses einfache Beispiel funktioniert:

Code: Alles auswählen

import os

import wx
               
class Frame(wx.Frame):   
    def __init__(self,parent):
        wx.Frame.__init__(self,parent,-1)
        self.textControl=wx.TextCtrl(self)
        path = "/home/franz/tmp"
        os.path.walk(path,self.testWalk,None)

    def testWalk(self,arg,dir,files):
        for file in files:
            self.textControl.write('\n'+file)

class App(wx.App):
    
    def OnInit(self):
        frame = Frame(None)
        frame.Show(True)
        return True
           
app = App(redirect=False)
app.MainLoop() 
Nur ist es nicht besonders sinnvoll, damit ein Text Control zu befüllen.
sylenz
User
Beiträge: 19
Registriert: Dienstag 21. Juli 2009, 05:12

@Francesco Super, das Beispiel hats gebracht! Ich bin mit wxPython noch nicht so konfirm und vergesse des öfteren die selfs, sowohl im Funktionskopf als auch beim Aufruf - das war das Problem.
Die Ausgabe in einem TextControl sollte nur zu Testzwecken erfolgen, um zu sehen ob die Funktion funktioniert.
@Rebecca Auch dir vielen Dank für die nützlichen Ratschläge!

Spitze, ich hätte so wohl noch ne ganze Weile nach dem "Fehler" gesucht :-/
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Eine schöne "perfekt" Ausgabe wäre für mich, die Ausgabe in eine TreeCtrl

Noch ein sehr gutes Tut (mir hats viel gebracht): http://wiki.wxpython.org/AnotherTutorial und ein ähnliches fast komplett gleiches, nur in "schön http://www.zetcode.com/wxpython/
the more they change the more they stay the same
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Die Seite kannte ich noch gar nicht. Sehr schön gemacht und danke für den Hinweis.
Antworten