Problem mit Tabulatoren

Plattformunabhängige GUIs mit wxWidgets.
Antworten
galdo
User
Beiträge: 12
Registriert: Montag 19. November 2007, 10:03

Hallo,

ich habe eine wxPython GUI erstellt und möchte nun zwischen den einzelnen Komponenten mittels der TAB-Taste hin und her wechseln. Allerdings habe ich überhaupt keine Ahnung, wie das funktionieren soll?

Gibt es dafür Implementierungen, die per style=... eingebunden werden können, oder muss man dazu einen Key-Event programmieren, den man dann selbst auswerten muss?

Code ausgelagert: http://paste.pocoo.org/show/11281/

Vielen Dank für eure Informationen - ich bin absoluter wx-Neuling und daher immer für "dumme" Fragen zu haben ;)

Also wie gesagt - vielen Dank schonmal
GALDO

Edit by Gerold: Code ausgelagert
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo galdo!

Willkommen im Python-Forum!

Du musst deine Widgets in ein Panel legen. Das Panel kümmert sich dann automatisch darum, dass du mit Tab von einem zum nächsten Widget springen kannst.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
galdo
User
Beiträge: 12
Registriert: Montag 19. November 2007, 10:03

Danke für den Tipp,

auf meinem Mac, auf dem ich entwickle funktioniert das ganze auch so - allerdings nicht auf dem Windowsrechner - Ich habe dort sämtliche Komponenten auf das Panel gelegt, aber a) es sieht irgendwie fehlerhaft aus, und b) funktioniert es nicht :(

Code: Alles auswählen

            btConvert = wx.Button(panel, 0, getLanguage('_convert:'), wx.Point(230,170), wx.Size(100,20))
            btExit = wx.Button(panel, 0, getLanguage('_exit:'), wx.Point(230, 200), wx.Size(100, 20)) 

            txtSource = wx.TextCtrl(panel,-1,'', pos=wx.Point(120,48), size=wx.Size (210,20), style=wx.TAB_TRAVERSAL)
            txtDest = wx.TextCtrl(panel,-1,'', pos=wx.Point(120,78), size=wx.Size (210,20), style=wx.TAB_TRAVERSAL)

            image_earth = wx.Image("earth_win.png",wx.BITMAP_TYPE_PNG)
            back = wx.StaticBitmap(panel, bitmap=wx.BitmapFromImage(image_earth), pos=wx.Point(0,-5))
            back.SetBackgroundColour(panel.GetBackgroundColour())

Noch eine Idee?

Vielen Dank schonmal und auch danke für die herzliche Aufnahme in dem Forum :)

Galdo

PS:

Hier zum Vergleich die Mac und die Win-Version! Was micht stört ist v.a. die Tatsache, dass unter Windows die Borders nicht SUNKEN sind und natürlich das der TAB nicht geht :(
Bild
Bild
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

galdo hat geschrieben:

Code: Alles auswählen

txtSource = wx.TextCtrl(panel,-1,'', pos=wx.Point(120,48), size=wx.Size (210,20), style=wx.TAB_TRAVERSAL)
Hallo Galdo!

``style = wx.BORDER_SUNKEN`` sollte funktionieren.

``wx.TAB_TRAVERSAL`` kann Schwierigkeiten machen. Brauchst du es wirklich?

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
galdo
User
Beiträge: 12
Registriert: Montag 19. November 2007, 10:03

BORDER_SUNKEN hab ich schon ausprobiert - hängt wohl irgendwie mit dem Bild zusammen :(

TAB_TRAVERSAL hab ich schon raußgenommen. Dachte, dass wäre Voraussetzung für die Steuerung mittels TAB-Taste!

Die Borders sind übrigens Sunken, wenn ich das Bild nicht dazu packe - dann ist alles OK, aber das Bild legt sich scheinbar irgendwie über die TextCtrls - kann man irgendwo sagen, dass das Bild ganz unten stehen soll, sprich also Hintergrund direkt auf dem Panel liegt?

Danke Galdo
PS: Die Buttons werden übrigens in der Win-Version nur angezeigt, wenn ich diese auf dem Hintergrundbild (= Image) plaziere.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo Galdo!

Das hatte ich vorher nicht bemerkt. Du legst Widgets über das Bild.

``wx.StaticBitmap`` ist kein Container. Du darfst nichts über das Bild legen.

Wenn du ein Hintergrundbild haben möchtest, dann zeichne das Bild auf das Panel.

--> http://paste.pocoo.org/show/11283/

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
galdo
User
Beiträge: 12
Registriert: Montag 19. November 2007, 10:03

Vielen Dank für deine bisherigen Antworten - ich habe aber leider immer noch ein Problem. Folgenden Code verwende ich zur Zeit:

Code: Alles auswählen

        panel = wx.Panel(self)
        self.bmp = wx.Bitmap("earth_win.jpg")
        self.Bind(wx.EVT_PAINT,self.OnPaint)

Code: Alles auswählen

    def OnPaint(self,evt):
        dc = wx.BufferedPaintDC(self, self.bmp)
Allerdings wird das Bild immer noch nicht angezeigt. Muss ich das dc nicht noch irgendwie dem Panel anhängen?

Danke nochmals
Galdo
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

galdo hat geschrieben:Allerdings wird das Bild immer noch nicht angezeigt. Muss ich das dc nicht noch irgendwie dem Panel anhängen?
Hallo Galdo!

Code: Alles auswählen

        self.panel = wx.Panel(self)
        self.bmp = wx.Bitmap("earth_win.jpg")
        self.panel.Bind(wx.EVT_PAINT, self.OnPanelPaint)

Code: Alles auswählen

    def OnPanelPaint(self,evt):
        dc = wx.BufferedPaintDC(self.panel, self.bmp)
Sobald der BufferedPaintDC zerstört wird, zeichnet er. -- Also beim Verlassen der Methode *OnPanelPaint*.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
galdo
User
Beiträge: 12
Registriert: Montag 19. November 2007, 10:03

Vielen Dank für die Schnippsel - die haben zwar nicht ganz funktioniert, haben mich allerdings auf die richtige Spur gebracht ;)

Das Problem ist aber, dass aus irgendeinem Grund die Performance, wie das Fenster gezeichnet wird extremst einbricht, so dass das Programm nicht mehr verwendbar ist :(

Ich habs jetzt aufgegeben und verzichte in der Windows Version auf Tabs - is zwar schade, aber nicht sooo wichtig!

Vielen Dank dir auf jeden Fall - hast mir trotzdem sehr geholfen...

Galdo
Antworten