[ALPHA] Vista Navigation-Leiste

Du hast eine Idee für ein Projekt?
Antworten
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Hi... ich baue gerade die Navigationsleiste mit wx.Python nach, die im Explorer seit WindozeVista eingefuehrt wurde. Ich finde diese Aufteilung in Buttons mit Untermenues so praktisch...

Bisher sieht es schon nach der Leiste und wird zu einem Textfeld, wenn man reinklickt. Das Menüfeld funktioniert schon, nur das Menü noch nicht :roll:

Wuerde mich ueber Feedback freuen... Code folgt spaeter, wenn ich wieder an nem Punkt ankomme, an dem es benutzbar ist...

Bild

Gruesse
NKoehring

PS: Die Pfad-Bausteine sind komplett per DC gezeichnete Widgets, die von wx.Control aberben... Die Farbverlaeufe sind prozedural. Der kleine Pfeil ist ein Polygon. Es werden keinerlei Bitmaps verwendet.
Zuletzt geändert von nkoehring am Sonntag 30. September 2007, 00:39, insgesamt 1-mal geändert.
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

nkoehring hat geschrieben:Bild
...gefällt mir. :D
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

So, inzwischen gibt es ein Menue, dass auch funktioniert, sich aber noch nicht so verhaelt, wie ich es will. Beim aendern des Pfades wird (dank einer eben entdeckten Anleitung von gerold) auch ein sogenanntes EVT_PATH_CHANGED an das TopLevelParent (also den Frame) gesendet.

Das EventObject enthaelt ein Property path, das (man glaubt es kaum) den aktuellen Pfad enthaelt.

Hat jemand noch Ideen fuer das EventObject bzw dessen Properties?

Ich gehe jetzt erstmal schlafen... und morgen gehts weiter und gibts vielleicht ja auch mal Code oder so ;)

EDIT: Zu dem Menue und seinem Verhalten:
Wenn ich ein PopupMenue erzeuge verhaelt es sich nicht so wie die Menuepopups bei MenuBars. Außerdem verliert mein Objekt den Focus, wenn das Menue aufspringt...
Weiß jemand wie ich das Verhalten einer MenuBar simulieren kann? Es geht mir darum, dass das Menu "springt", wenn ich bei aktiviertem Menue mit der Maus von einem Objekt zum naechsten wechsle und das die Objekte ihren Focus nicht abgeben...
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
poker
User
Beiträge: 146
Registriert: Donnerstag 20. September 2007, 21:44

Hi, mir gefällt das auch und ist ne gute Idee :) Vielleicht kannst du dein Widget auch in der wx mailingliste vorstellen und es wird in einen der Release in wxPython hinzugefügt.
Weiß jemand wie ich das Verhalten einer MenuBar simulieren kann? Es geht mir darum, dass das Menu "springt", wenn ich bei aktiviertem Menue mit der Maus von einem Objekt zum naechsten wechsle und das die Objekte ihren Focus nicht abgeben...
Keine Ahnung. Ist schon länger her das ich was mit wx gemacht habe (Spiele momentan mit PyGTK und QT). Du kannst aber dein Code posten und dann Spielen wir ein wenig damit. Vielleicht fällt uns da was ein. Pack aber bitte ein Sample/Boilerplate Code zum Spielen dazu.
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

poker hat geschrieben:Du kannst aber dein Code posten und dann Spielen wir ein wenig damit. Vielleicht fällt uns da was ein. Pack aber bitte ein Sample/Boilerplate Code zum Spielen dazu.
Hi poker... ja ich hab genau das gerade gebaut und werd es, nachdem ich ein wenig durchkommentiert und noch ein paar Sachen zurechtgefeilt hab, mal veroeffentlichen... *also* heute noch ;)
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

mist, ich glaube ich muss das auf morgen verschieben... ich hab nen Bug eingebaut... und hab im Moment noch keinen Loesungsansatz...
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Soooo... nun hab ichs. Der Bug war (wie so oft) auf meine eigene Unzulaenglichkeit zu schieben. Es passieren halt komische Sachen wenn man Event-Methoden fuer Objekt X nicht nur an X sondern auch an Y bindet, einfach weil man nicht nachgedacht hat, was man da eigentlich tut ^^

Aber zum eigentlichen Thema: Link zum vista_navbar sourcecode!

Um ein paar Fragen vorzubeugen:
Die DemoApplication ist nicht dazu gedacht"nuetzlich" im Sinne von Produktiv zu sein. Der Frame ist nicht Resizable, weil ich einfach keine Lust darauf hatte. Außerdem resized sich die VistaNavBar im Moment noch selbst. Das macht jedem Sizer schwer zu schaffen ;)

Vorwiegende Features bisher:
* die Navigation funktioniert vollstaendig (ohne Metaordner, wie zB den Arbeitsplatz unter Windows)
* man kann in die Bar klicken um den Pfad wie in jedem normalen Textfeld einzutippen
* Effektspielereien, bis auf die Fading-Effekte sind soweit komplett

...alles weitere: einfach ausprobieren oder mich fragen ;)

Viel Spaß und ordentliches Feedback bitte,
NKoehring

Edit: Ach und nochwas... ich hab das ganze mit Python 2.5 in SciTE unter Windows Vista entwickelt. Ich wuerde mich ueber Tests auf anderen Systemen freuen. Die Bar sollte soweit Platformunabhaengig sein, aber da meine tolle neue ATI-Karte bisher unter Linux immer nur kurz funktioniert, bis dann der Treiber abstuerzt und ich bisher keine Lust hatte, da was zu machen, hab ich das ganze noch nicht woanders testen koennen...

EDIT: warum sagt denn keiner, dass ich den Link zerschossen habe ^^
Zuletzt geändert von nkoehring am Mittwoch 10. Oktober 2007, 15:56, insgesamt 2-mal geändert.
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
CrackPod
User
Beiträge: 205
Registriert: Freitag 30. Juni 2006, 12:56

Hallo,

also bei mir unter Ubuntu 7.04 mit Python 2.5.1 bekomm ich folgenden Traceback:

Code: Alles auswählen

tobsl@blechbuechse:~$ python /home/tobsl/Python/vistabar.py 
Traceback (most recent call last):
  File "/home/tobsl/Python/vistabar.py", line 433, in <module>
    frame = DemoFrame(None, style=wx.CAPTION)
  File "/home/tobsl/Python/vistabar.py", line 406, in __init__
    self.navbar = VistaNavBar(panel)
  File "/home/tobsl/Python/vistabar.py", line 290, in __init__
    self.set_path(initial_path)
  File "/home/tobsl/Python/vistabar.py", line 355, in set_path
    else: pos = (self.elem[-1].GetPosition().x+self.elem[-1].GetSize().x, 0)
IndexError: list index out of range
Liebe Grüße
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

CrackPod hat geschrieben:Hallo,

also bei mir unter Ubuntu 7.04 mit Python 2.5.1 bekomm ich folgenden Traceback:

Code: Alles auswählen

tobsl@blechbuechse:~$ python /home/tobsl/Python/vistabar.py 
Traceback (most recent call last):
  File "/home/tobsl/Python/vistabar.py", line 433, in <module>
    frame = DemoFrame(None, style=wx.CAPTION)
  File "/home/tobsl/Python/vistabar.py", line 406, in __init__
    self.navbar = VistaNavBar(panel)
  File "/home/tobsl/Python/vistabar.py", line 290, in __init__
    self.set_path(initial_path)
  File "/home/tobsl/Python/vistabar.py", line 355, in set_path
    else: pos = (self.elem[-1].GetPosition().x+self.elem[-1].GetSize().x, 0)
IndexError: list index out of range
Liebe Grüße
Danke dafuer. Sieht so aus, als ob der "inital_path" nicht vernuenftig gesetzt werden wuerde. Du koenntest ihn einfach setzen, in dem du in der Frame-Klasse bei der Instanzierung einfach nen initial_path setzt.
Also zB so:

Code: Alles auswählen

self.navbar = VistaNavBar(panel, initial_path="~")
...wenn das nicht geht, versuch nen absoluten Pfad:

Code: Alles auswählen

self.navbar = VistaNavBar(panel, initial_path="/home/")
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
CrackPod
User
Beiträge: 205
Registriert: Freitag 30. Juni 2006, 12:56

Hallo,

es geht scheinbar auch mit relativer und absoluter Pfadangabe nicht.

Code: Alles auswählen

tobsl@blechbuechse:~$ python /home/tobsl/Python/vistabar.py 
Traceback (most recent call last):
  File "/home/tobsl/Python/vistabar.py", line 433, in <module>
    frame = DemoFrame(None, style=wx.CAPTION)
  File "/home/tobsl/Python/vistabar.py", line 406, in __init__
    self.navbar = VistaNavBar(panel, initial_path='~')
  File "/home/tobsl/Python/vistabar.py", line 290, in __init__
    self.set_path(initial_path)
  File "/home/tobsl/Python/vistabar.py", line 359, in set_path
    height = self.elem[0].GetSize().y
IndexError: list index out of range
tobsl@blechbuechse:~$ python /home/tobsl/Python/vistabar.py 
Traceback (most recent call last):
  File "/home/tobsl/Python/vistabar.py", line 433, in <module>
    frame = DemoFrame(None, style=wx.CAPTION)
  File "/home/tobsl/Python/vistabar.py", line 406, in __init__
    self.navbar = VistaNavBar(panel, initial_path='/home/')
  File "/home/tobsl/Python/vistabar.py", line 290, in __init__
    self.set_path(initial_path)
  File "/home/tobsl/Python/vistabar.py", line 355, in set_path
    else: pos = (self.elem[-1].GetPosition().x+self.elem[-1].GetSize().x, 0)
IndexError: list index out of range
Liebe Grüße
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

tja, da weiß ich auch nicht was los ist... ich werde die moeglichen Fehler mal abfangen und dann den Code aktualisieren... dann koenntest du schauen, was passiert ;)

Danke nochmal.

EDIT: http://paste.pocoo.org/show/4885/
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Hab das mal getestet. Ist ziemlich Buggy hier auf einem Windows 2000 Rechner. Die Bar flackert wie nix Gutes und wenn man nicht über einen Button Hovert ist der Hintergrund und der Text weiß.
TUFKAB – the user formerly known as blackbird
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

ah danke mitsuhiko... das selbstbasteln von Widgets ist scheinbar echt ne umstaendliche Sache. Im Moment fehlt mir n bissl die Zeit, aber ich werd mich sicher bald mal wieder ransetzen ;)
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Hallo... ich wollte nur sagen, dass es im Moment wieder weiter geht. Fuer alle interessierten werde ich hier immermal schreiben, was sich so tut.

Im moment bekomme ich auch Hilfe von Crush. Ich denke mal, jetzt steht der Weiterentwicklung nichts mehr im Wege ;)

Einige Bugs sind schon gefunden und beseitigt. Inzwischen sollte auch der Farbverlauf in den PfadElementen ueberall richtig gezeichnet werden. Sorgen bereitet mir noch die Schrift und der (fuer mich bisher nicht reproduzierbare) Speicherzugriffsfehler, der ab und an mal beim wechseln des Pfades auftritt :cry:

Naja und ich wuerde gern noch rausfinden, wie ich das mit dem Menüleisten-Verhalten hinbekommen soll :K

Gruesse
NKoehring

EDIT: Die Entwicklung kann ab jetzt bei Launchpad unter dem Projektnamen vistanavbar verfolgt werden.
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Antworten