Hallo,
ich stelle aus meinem Haptframe einen neuen Frame und lasse ihn mir Show() anzeigen. Soweit kein problem, bis auf das der neue Frame hinter dem Hauptframe liegt. Eigentlich sollte der neue Frame den Focus bekommen. Gibt es da eine Möglichkeit den neuen in den Focus (Vordergrund) zu befördern?
Der Programmablauf ist ungefähr so:
wx.App -> wx.Frame (Hauptframe) -> Show() -> wx.EVT_BUTTON -> wx.Frame -> Show()
neuer wx.Frame im Hintergrund
Ich habe mal jeweils das Event wx.EVT_ACTIVATE auf eine einfache Ausgabe Funktion gebunden die Namen und GetAktive() ausgibt. Hier das Ergebnis
Haupt True
Haupt False
Neu True
Neu False
Haupt True
Daraus schließe ich, dass der neue Frame erst im Vorgrund ist, aber anschließend sich der Hauptframe den Focus wiederholt. Warum macht der das xD
EDIT:
Der Focus geht erst nach dem Beenden der an wx.EVT_BUTTON Methode verloren.
Haupt True
Haupt False
Neu True
Neu False
Haupt True
Daraus schließe ich, dass der neue Frame erst im Vorgrund ist, aber anschließend sich der Hauptframe den Focus wiederholt. Warum macht der das xD
EDIT:
Der Focus geht erst nach dem Beenden der an wx.EVT_BUTTON Methode verloren.
Gibt es in dem neuen Frame denn irgendwelche Eingabemöglichkeiten die den Fokus dort erforderlich machen? Kannst Du vielleicht ein minimales, lauffähiges Beispiel zeigen, das dieses Verhalten zeigt?
Mit dem minimalen Beispiel wird schwierig, da das Programm mittlerweile 10450 sloc hat. Der neun Frame hat besteht hauptsächlich aus einer wx.Notebook, der Hauptframe aus einem wx.SplitterWindow mit wx.TreeCtrl und wx.html.HtmlWindow zusätzlich ist noch ein wx.MiniFrame offen.
Merkwürdig ist auch, dass das Problem nur unter Windows auftritt, unter Linux ist der neue Frame im Vordergrund.
Merkwürdig ist auch, dass das Problem nur unter Windows auftritt, unter Linux ist der neue Frame im Vordergrund.
Du kannst den Fokus selber setzten
Code: Alles auswählen
self.SetFocus() # im neuen Frame
self.child_frame.SetFocus()
the more they change the more they stay the same
Klappt leider nichtDav1d hat geschrieben:Du kannst den Fokus selber setzten
Code: Alles auswählen
self.SetFocus() # im neuen Frame self.child_frame.SetFocus()
Code: Alles auswählen
#....
self._fc = True
self._time = 0
self.Bind(wx.EVT_ACTIVATE,self.OnActivate)
def OnActivate(self,event):
if self._fc and event.GetActive():
self._time = time()
print "aktivate"
if self._fc and not event.GetActive() and time()-self._time < 1.5:
self._fc = False
self.SetFocus()
print "reaktivate"