baum ansicht für ordner

Plattformunabhängige GUIs mit wxWidgets.
Antworten
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

Halli Hallo,
ich suche verzweifelt ein Modul, was es mir ermöglicht
einen Explorer in mein Programm einzubinden. Es sollte auch + und -
Zeichen verwenden um den Baum ein- bzw auszufahren. Hatte
gehofft, das es hierfür schon etwas fertiges gibt. :)

Gruss prosta
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

pr0stAta hat geschrieben:Halli Hallo,
ich suche verzweifelt ein Modul, was es mir ermöglicht
einen Explorer in mein Programm einzubinden. Es sollte auch + und -
Zeichen verwenden um den Baum ein- bzw auszufahren. Hatte
gehofft, das es hierfür schon etwas fertiges gibt. :)

Gruss prosta
Hallo prosta,

Meinst du das GenericDirCtrl (wxPy Demo => Custom Controls)?
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

aarrrrrgg :)
Hab mir paar Demos angeguckt und diese nicht gefunden.
Und ja, genau so etwas suche ich, danke dir ^^

*edit*

mhm gibt es auch eine Möglichkeit einen event handler daran
zu binden?

Code: Alles auswählen

self.Bind(wx.EVT_RIGHT_UP, self.onRightClick, id=201)
funktioniert nicht, wobei 201 die ID der GenericDirCtrl ist.
Sinn und Zweck war es, ein Popup aufploppen zu lassen, in dem
man bestimme Möglichkeiten hat, den jeweils angeklickten Pfad/Datei zu
editieren
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

*bump* :p
Die evt_handler der TreeCTRL funktionieren. Doch bringt mir das nicht
wirklich viel, da ich nur auf den Rechtsklick reagieren möchte...
verrückt :) Falls noch einer eine Idee hat, wäre ich sehr dankbar
gruss
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

pr0stAta hat geschrieben:*bump* :p
Die evt_handler der TreeCTRL funktionieren. Doch bringt mir das nicht
wirklich viel, da ich nur auf den Rechtsklick reagieren möchte...
verrückt :) Falls noch einer eine Idee hat, wäre ich sehr dankbar
gruss
Du hast das DirCtrl abgeleitet?
Kannst Du das Rechte Mausklick Event binden?

dirctrl = wx.GenericDirCtrl(self, -1, size=(200,225), style=0)

mit dirctrl.GetTreeCtrl() bekommst Du einen Zugriff auf das Treecontrol
(was ich im Archiv herausgefunden habe).

Leider weiss ich da auch nicht mehr weiter,
sonst eventuell in der User Mailing list fragen:
wxPython-users@lists.wxwindows.org ;)
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

danke für die antwort, ich werde das morgen in
aller frühe testen und ggf mal eine rückmeldung geben :D
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

Supi Francesco, funktioniert :D
Nun meine definitiv letzte Frage, wenn ich mir mit
GetPath die aktuell angewählte Zeile zurückgeben lasse,
schneidet er Dateinamen bei Leerzeichen ab. Bei Pfaden übernimmt
er den kompletten Namen.
Beispiel:
c:\programme\test\hallo anstatt c:\programme\test\hallo du da.py
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

pr0stAta hat geschrieben:Supi Francesco, funktioniert :D
Nun meine definitiv letzte Frage, wenn ich mir mit
GetPath die aktuell angewählte Zeile zurückgeben lasse,
schneidet er Dateinamen bei Leerzeichen ab. Bei Pfaden übernimmt
er den kompletten Namen.
Beispiel:
c:\programme\test\hallo anstatt c:\programme\test\hallo du da.py
Danke, freut mich ;)

Es ist immer gut (meiner Erfahrung nach), eine möglichst grosse Sammlung unterschiedlichster wxPython Programme
auf der Festplatte zu haben, dann mit findfiles z.B. auf GenericDir suchen. ;)

So habe ich gefunden, dass auch Pype 2.0 dieses Control verwendet.
Ich habe c:\programme\test\hallo du da.py erstellt, und Pype öffnet es auch anstandlos.
Mit welchem style hast du das DirCtrl initialisiert?
Vielleicht spielt das auch eine Rolle.
Oder hast du eine älter wxPy Version (Ich verwende die allerletzte
2.6.1.1prerelease von Mitte Juni dieses Jahres).
(Auch mit 2.6.0 funktioniert das Öffnen)

Auszug aus Pype:

Code: Alles auswählen

        self.browser = wx.GenericDirCtrl(self, -1, style=wx.DIRCTRL_SHOW_FILTERS, filter="All files (*.*)|*.*")
        tree = self.browser.GetTreeCtrl()
        tree.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnActivate, tree)
Das OnActivate sieht so aus:

Code: Alles auswählen

    def OnActivate(self, evt):
        fn = self.getheir()
        try:
            st = os.stat(fn)[0]
            if stat.S_ISREG(st):
                self.root.OnDrop([fn])
        except:
            evt.Skip()
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

Ich habe c:\programme\test\hallo du da.py erstellt, und Pype öffnet es auch anstandlos.
Das Problem ist auch nicht, das er die Datei nicht öffnen kann weil Leerzeichen enthalten sind, sondern weil das GetPath den falschen Pfad zurückgibt. Hier mal ein Auszug aus meinem Code wobei alles unwichtige rausgenommen wurde

Code: Alles auswählen

self.dir1 = wx.GenericDirCtrl(self, 201, size=(200,225), style=0)
self.dir1.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.onActivate)
Hier die onActivate

Code: Alles auswählen

pfad = self.dir1.GetPath()
if os.path.isfile(pfad):
  os.system(pfad)
Habe mir eben nochmal die aktuellste wx Version gezogen, macht allerdings keinen Unterschied :)
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

pr0stAta hat geschrieben:
Ich habe c:\programme\test\hallo du da.py erstellt, und Pype öffnet es auch anstandlos.
Das Problem ist auch nicht, das er die Datei nicht öffnen kann weil Leerzeichen enthalten sind, sondern weil das GetPath den falschen Pfad zurückgibt. Hier mal ein Auszug aus meinem Code wobei alles unwichtige rausgenommen wurde

Code: Alles auswählen

self.dir1 = wx.GenericDirCtrl(self, 201, size=(200,225), style=0)
self.dir1.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.onActivate)
Hier die onActivate

Code: Alles auswählen

pfad = self.dir1.GetPath()
if os.path.isfile(pfad):
  os.system(pfad)
Habe mir eben nochmal die aktuellste wx Version gezogen, macht allerdings keinen Unterschied :)
Eigenartig:

in Pype eingebaut:

print "Path Result:", self.browser.GetPath()

"Path Result: C:\Programme\test\hallo du da.py"
auch wenn ich Style 0 verwende.

Path Result: C:\Programme\test\hallo du da.py

Vielleicht doch ein Fall für die Mailing Liste.
Übrigens: Du hast die ansi und nicht die unicode version installiert?
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

Japp, habe die Ansi Version installiert.
Das ich python 2.3 noch habe sollte keinen Unterschied machen
oder?
*edit* ok an python 2.3 lags auch nicht, hab alles gerade aktualisiert
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

Ich finde auch ein "Edit" sollte den Thread auf geändert setzen, nicht nur neue Posts aber das ganz nebenbei nur ;)
Hoffe das du mir nochmal helfen kannst Francesco.
Habe den Fehler nämlich nun entdeckt !
Ich bilde den Fall hier mal ab:
So geht es nicht:

Code: Alles auswählen

   def __init__(self):
        ...
        self.dir1 = wx.GenericDirCtrl(self, 201, size=(200,225), style=0)
        self.bla = self.dir1.GetTreeCtrl()
        self.bla.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.onActivate)

   def onActivate(self, event):
        pfad = self.dir1.GetPath()
        print pfad
        ...
Wenn ich mir self.dir1.GetPath() aber nun in der __init__ ausgeben lasse,
erkennt er die Leerzeichen wieder und nimmt den gesamten Namen
der Datei und trennt nicht mehr nach Leerzeichen. Nun Frage ich mich, wie man das beheben soll. Ich habe versucht, mit lambda self.dir1.GetPath() als Parameter zu übergeben, was aber irgendwie nicht klappt. Hier mein Versuch:

Code: Alles auswählen

self.bla.Bind(wx.EVT_TREE_ITEM_ACTIVATED, lambda: self.onActivate(self.dir1.GetPath()))

def onActivate(self, event, pfad):
  ...
Gruss prosta
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

pr0stAta hat geschrieben:Ich finde auch ein "Edit" sollte den Thread auf geändert setzen, nicht nur neue Posts aber das ganz nebenbei nur ;)
Hoffe das du mir nochmal helfen kannst Francesco.
Habe den Fehler nämlich nun entdeckt !
Ich bilde den Fall hier mal ab:
So geht es nicht:

Code: Alles auswählen

   def __init__(self):
        ...
        self.dir1 = wx.GenericDirCtrl(self, 201, size=(200,225), style=0)
        self.bla = self.dir1.GetTreeCtrl()
        self.bla.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.onActivate)

   def onActivate(self, event):
        pfad = self.dir1.GetPath()
        print pfad
        ...
Wenn ich mir self.dir1.GetPath() aber nun in der __init__ ausgeben lasse,
erkennt er die Leerzeichen wieder und nimmt den gesamten Namen
der Datei und trennt nicht mehr nach Leerzeichen. Nun Frage ich mich, wie man das beheben soll. Ich habe versucht, mit lambda self.dir1.GetPath() als Parameter zu übergeben, was aber irgendwie nicht klappt. Hier mein Versuch:

Code: Alles auswählen

self.bla.Bind(wx.EVT_TREE_ITEM_ACTIVATED, lambda: self.onActivate(self.dir1.GetPath()))

def onActivate(self, event, pfad):
  ...
Gruss prosta
Hallo,

jetzt stehe ich auch bald an:
1) geht die Funktion: GetFilePath()?
2) das mit dem lambda (ich verwende diese selten).
aber sollte das nicht eher so aussehen:

Code: Alles auswählen

lambda x: self.OnActivate(x, self.dir1.GetPath())
so muesste es zumindest von der Syntax her funktionieren.
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

Danke für die schnelle Antwort.
1) Nein
muss es aber nicht, denn lambda geht nun :D
Hatte meinen lambda Aufruf aus einem anderen Programm übernommen,
dort ging es komischerweise so. Nun gut, ein letztes Problem bleibt
allerdings noch, os.system kann irgendwie keine pfade a lá
c:\test\hallo test test.mp3 öffnen. Es bekommt den richtigen Pfad aber schneidet wieder bei den Leerzeichen ab :/ Dies ist nun aber kein
wx Problem mehr
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Super, dass es jetzt funktioniert; war auch für mich lehrreich :)
Antworten