2016-06-22 18 views
0

Ich arbeite an einer Software für das Unternehmen, für das ich arbeite. Ich benutze wx für die GUI. Ich habe im Grunde Folgendes: Wenn das Programm beschäftigt ist oder laden, ich ein wx.BusyInfo Objekt erstellen. Aber manchmal, während diese ausgelastete Info-Box immer noch sichtbar ist, und ich eine Fehlermeldung für den Benutzer drucken muss, aber dass MessageDialog tatsächlich unter der BusyInfo-Box auftaucht. Warum? Gibt es eine Möglichkeit, den Fehler oben auf der BusyInfo anzuzeigen? Ich habe versucht, die wx.STAY_ON_TOP Option, und es hat nicht funktioniert.wx Python MessageDialog knallt hinter der BusyInfo-Box?

Ich brauche es, um auf diese Weise zu arbeiten, weil meine Klassen verschachtelt werden, und ich möchte nicht die BusyInfo löschen müssen, den Fehler anzeigen, dann die BusyInfo neu erstellen; Es wäre einfacher für meinen Code, wenn der MessageDialog-Fehler nur über der BusyInfo-Box angezeigt wird.

Danke.

Hier ist ein Beispielcode für das, was ich zu tun versucht:

# myWindow is the main Window or Frame 
wx.BusyInfo("Loading, please wait ...", myWindow) 
wx.MessageDialog(myWindow, "Error message", "Error!", style = wx.OK | wx.ICON_EXCLAMATION | wx.STAY_ON_TOP) 

Antwort

0

Nach vielen Google-Suchen und Forschung fand ich heraus, wie das Problem zu lösen! Zuerst verwende ich anstelle von wx.BusyInfo PyBusyInfo (Ich fand den Code hier: https://searchcode.com/codesearch/view/63249201/). Dies liegt daran, dass wx.BusyInfo nicht tatsächlich von einer wx.Window-Klasse geerbt wird, sondern PyBusyInfo; wir brauchen den Frame des Busy, weil wir ihn in wx.MessageDialog übergeben werden. Dann übergebe ich einfach den self._infoFrame als Eltern in den wx.MessageDialog. Das ist es.

Zuerst habe ich diese Methode PyBusyInfo Klasse hinzugefügt:

def getFrame(self): 
    return self._infoFrame 

Dann ich diesen Code, um es korrekt über das Besetzt-Info-Box mit der Fehlermeldung funktioniert:

myBusy = PyBusyInfo("Loading, please wait ...", myParentWindow) 
wx.MessageDialog(myBusy.getFrame(), "Error message", "Error!", style = wx.OK | wx.ICON_EXCLAMATION | wx.STAY_ON_TOP) 

Diese Es war ein schwer zu lösendes Problem, aber diese Informationen sollten anderen Menschen helfen, die das gleiche Problem haben.