wxPython Search - downloadable Program (Aktualisiert)

Plattformunabhängige GUIs mit wxWidgets.
Antworten
richardtreier
User
Beiträge: 23
Registriert: Dienstag 29. Dezember 2009, 14:34

Aktualisiert:
-Die Suche und der Start dürften jetzt viel schneller verlaufen



wxPython-doku-Search
es gibt ja schon die online doku für wxPython: http://www.wxpython.org/docs/api/

Ich fand diese doku ohne suche ein bisschen nervig, deshalb habe ich dieses Programm geschrieben:


http://richardtreier.kilu.de/wxPython-Search.zip
http://richardtreier.kilu.de/wxPythonSearch.msi

einfach run.pyw starten ( man muss wxPython und python 2.6 haben )

einfach leeren string als suchbegriff eingeben, um den ganzen baum zu sehen...

doppelclick auf ein item, um die doku anzuzeigen.

Das Programm kann man offline verwenden!
Zuletzt geändert von richardtreier am Donnerstag 7. Januar 2010, 17:37, insgesamt 3-mal geändert.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Wow!

Nicht schlecht danke
the more they change the more they stay the same
Benutzeravatar
martin101986
User
Beiträge: 85
Registriert: Montag 3. Dezember 2007, 19:15
Wohnort: Steiermark, Österreich

Hallo richardtreier,

erstmal willkommen im Forum.

bei der wxPython-Demo Sammlung ist eine Dokumentation dabei, in der du auch suchen kannst.

Ich hab mir den Code mal angesehen. Sieh dir mal die PEP8 an und vergib Variablennamen die etwas aussagen anstatt von x und q. Du solltest auch mal das Tutorial durcharbeiten falls du es noch nicht getan hast.

Doppelte Unterstriche sind überflüssig, ein Unterstrich reicht aus, Python Programmierer wissen dann das sie an dieser Variable nichts ändern sollen. Zeilenlänge von max. 80 Zeichen beachten und zwischen Funktionen/Methoden leerzeilen lassen, ist übersichtlicher.

Deine RawCreateTree Funktion könnte man viel kürzen, sie ist zu lange und es werden immer die gleichen Schritte wiederholt.

Für was hast du in den __init__ Methoden die ganzen if True abfragen, diese sind überflüssig.

Deine __maphelp funktionen ist nur eine Helferfunktion und hat nichts in der Klasse SearchPanel zu suchen. Und statt mit map eine Liste mit den gefunden Elementen zu erstellen tätte ich die filter Funktion verwenden.

Die CreateTree Funktion gehört in die SearchPanel Klasse.

Das sind die Dinge die mir aufgefallen sind.

Grüße Martin
richardtreier
User
Beiträge: 23
Registriert: Dienstag 29. Dezember 2009, 14:34

Hehe,das mit den ifs ist deshalb, weil ich komodo active state ide verwende, und so diesen bereich "einklappen" kann.
Das mit den dopp unterstrichen, mit x und q sind angewohnheiten von mir...

Das mit den schleifen ist vielleicht lang, aber mir fiel nichts anderes ein, um aus dem array einen baum zu machen.

Ich bin ja kein professioneller python programmierer... ich bin sogar erst 13 Jahre alt ^^

Und: bei der wxpython demo sind NICHT alle eigenschaften und funktionen aufgelistet...
Python 2.6.5 === wxPython 2.8.10.1 uni === py2exe === Win7x86 ultimate
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

richardtreier hat geschrieben:Hehe,das mit den ifs ist deshalb, weil ich komodo active state ide verwende, und so diesen bereich "einklappen" kann.
ymmd :lol:
BlackJack

@richardtreier: Das Einklappen *einzelner* Zeilen macht den Quelltext also übersichtlicher!? Insbesondere wenn man dafür noch eine sinnlose ``if``-Zeile einfügt!? Argh!

Die Abkürzungen solltest Du Dir wirklich abgewöhnen. `array` statt `arr` und `result` statt `res` werden Dich beim Schreiben schon nicht umbringen, erleichtern das Lesen aber.

Über Liste→Baum bitte noch einmal nachdenken. Selbst wenn man Deinen Ansatz verfolgt, muss man dass nicht so lang und über Kopieren und Einfügen lösen.

Sind die Werte im globalen `data` eigentlich deckungsgleich mit den Dateinamen (ohne '.html')? Wenn ja, warum stehen die dann im Programm?

Warum ist `MyCmp()` zweimal definiert? Man sollte da besser das `key`-Argument von `sort()` zum Sortieren verwenden, das ist effizienter.

Dann steht für meinen Geschmack zuviel Code auf Modulebene. Mal als sehr schlechtes Beispiel die Zuweisung an `docPath`, das sich in Zeile 1667 zwischen einem grösseren Block auskommentiertem Quelltextes und einer Klassendefinition versteckt. Das gehört entweder in eine Hauptfunktion oder in die Hauptklasse, oder als Konstante an den Programmanfang. Dann hat man auch eine Chance das zu finden, wenn man es mal anpassen muss. Pfade sollte man mit `os.path.join()` zusammensetzen, dann würde Dein Programm vielleicht nicht nur unter Windows funktionieren. Und das `os`-Modul würde dann auch nicht umsonst importiert werden. ;-)

Man benutzt Zeichenketten eigentlich nicht zum Auskommentieren von Quelltext. So ist am Syntaxhighlighting unter Umständen nicht mehr zu erkennen, was jetzt Dokumentation, Zeichenkette, oder einfach nur unbenutzer Quelltext ist. Auskommentierter Quelltext hat in veröffentlichten Programmen IMHO sowieso nichts zu suchen.

In `SimpleSearch` gibt es zwei Methoden, die auf `self.tree` zugreifen, wass es eigentlich gar nicht geben dürfte!?

`file` ist der Name eines eingebauten Typs, den sollte man nicht an etwas anderes binden.
richardtreier
User
Beiträge: 23
Registriert: Dienstag 29. Dezember 2009, 14:34

Ich habe einen schnelleren weg gefunden:

Code: Alles auswählen

def RawCreateTree(array):
    result={}
    for element in array:
        if element:
            ebenen=str(element).split(".")
            ebene=1
            resultCheck=result
            for ebenenName in ebenen:
                if not ebenenName in resultCheck.keys():
                    resultCheck[ebenenName]={}
                resultCheck=resultCheck[ebenenName]
                ebene=ebene+1
    return result
Python 2.6.5 === wxPython 2.8.10.1 uni === py2exe === Win7x86 ultimate
Benutzeravatar
martin101986
User
Beiträge: 85
Registriert: Montag 3. Dezember 2007, 19:15
Wohnort: Steiermark, Österreich

Sieht schon besser aus, bitte verwende nur eine Sprache im Quelltext.

Für was verwendest du die Variable ebene? Diese verwendest du nirgends, daher kannst du sie weglassen.
richardtreier
User
Beiträge: 23
Registriert: Dienstag 29. Dezember 2009, 14:34

martin101986 hat geschrieben: Für was verwendest du die Variable ebene? Diese verwendest du nirgends, daher kannst du sie weglassen.
Das liegt daran, dass ich davor was anderes ausprobiert habe...
Python 2.6.5 === wxPython 2.8.10.1 uni === py2exe === Win7x86 ultimate
Antworten