Seite 1 von 1
Problem mit Tabulatoren
Verfasst: Montag 19. November 2007, 10:16
von galdo
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
Verfasst: Montag 19. November 2007, 11:06
von gerold
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
Verfasst: Montag 19. November 2007, 11:20
von galdo
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
Verfasst: Montag 19. November 2007, 12:29
von gerold
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
Verfasst: Montag 19. November 2007, 13:24
von galdo
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.
Verfasst: Montag 19. November 2007, 14:01
von gerold
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
Verfasst: Montag 19. November 2007, 15:47
von galdo
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
Verfasst: Montag 19. November 2007, 16:01
von gerold
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
Verfasst: Montag 19. November 2007, 16:34
von galdo
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