Seite 1 von 1

ShowModal() Frame

Verfasst: Samstag 24. Juni 2006, 17:17
von DatenMetzgerX
Die wx.Frame Klasse hat ja kein ShowModal. Ich hätte aber trodzdem gerne Frames, welche in dem aktuellen Programm zu oberst sind. Die hinteren Frames sollten Deaktiviert sein (also nichs anklickbar).

Gibts da was?

Re: ShowModal() Frame

Verfasst: Samstag 24. Juni 2006, 18:20
von gerold
DatenMetzgerX hat geschrieben:Die wx.Frame Klasse hat ja kein ShowModal. Ich hätte aber trodzdem gerne Frames, welche in dem aktuellen Programm zu oberst sind.
Hi DatenMetzgerX!

Erstelle statt einem wx.Frame einen wx.Dialog. Diesen kannst du dann statt mit Show() mit ShowModal() aufrufen.

lg
Gerold
:-)

Verfasst: Samstag 24. Juni 2006, 19:12
von DatenMetzgerX
dann geht CreateStatusBar() nicht mehr

Verfasst: Samstag 24. Juni 2006, 20:26
von gerold
DatenMetzgerX hat geschrieben:dann geht CreateStatusBar() nicht mehr
Hi DatenMetzgerX!

Stimmt. Daran hatte ich nicht gedacht.

http://lists.wxwidgets.org/archive/wxPy ... 00147.html
http://wxwidgets.org/manuals/2.6.3/wx_w ... wmakemodal

lg
Gerold
:-)

Verfasst: Samstag 24. Juni 2006, 22:01
von DatenMetzgerX
Genau das habe ich gesucht, Merci :)

Verfasst: Samstag 24. Juni 2006, 22:58
von DatenMetzgerX
Irgend wie gibt es da noch einen Fehler...

z.T stürzt das ganze dann einfach ab, im Anhang mal die Dateien.

http://famreiser.ch/python/image_resizer.zip

benötigt wird wxPython und PIL

Verfasst: Sonntag 25. Juni 2006, 09:18
von gerold
DatenMetzgerX hat geschrieben:http://famreiser.ch/python/image_resizer.zip
Hi DatenMetzgerX!

Ich habe mir den Code mal angesehen. Ich glaube ich weiß, warum das Programm abstürzt.

1. Du hast ja mehrere Frames. Wenn du vom Hauptframe aus den BrowseFolder-Frame aufrufst, dann machst du den BrowseFolder-Frame "modal". Zuerst einmal, würde ich den Frame nur dann modal machen, wenn ich vorher geprüft habe, ob ein Parent übergeben wurde.

Code: Alles auswählen

if parent:
    self.MakeModal(True)
2. Du lässt das Event "EVT_CLOSE" und den Button zum Schließen auf die selbe Methode zugreifen. Allerdings wird das Event EVT_CLOSE immer aufgerufen wenn du das Fenster schließt. Egal ob das durch deinen Close-Button oder durch einen Klick auf das X in der Titelleiste passiert.
Dadurch kommt das System ein wenig durcheinander. --> Die Methode wird zu oft aufgerufen.

Besser wäre es, wenn du das Event EVT_CLOSE abfängst und dort prüfst ob ein Parent übergeben wurde. Wenn ja, dann rufe

Code: Alles auswählen

self.MakeModal(False)
auf.

Den Schließen-Button würde ich auf eine **eigene** Methode zugreifen lassen.

Code: Alles auswählen

def __init__(self, parent, ...):
    self.parent = parent
    ...
    self.Bind(wx.EVT_CLOSE, self.on_close)
    self.cmdClose.Bind(wx.EVT_BUTTON, self.exit)
    ...
    self.Layout()
    if self.parent:
        self.MakeModal(True)
        self.CenterOnParent()
    else:
        self.Center()

def exit(self, event = None):
    """
    Event-Handler für den Button
    """
    self.Close()

def on_close(self, event):
    """
    Bei jedem EVT_CLOSE...
    """
    if self.parent:
        self.MakeModal(False)
    event.Skip()
lg
Gerold
:-)

Verfasst: Sonntag 25. Juni 2006, 10:17
von DatenMetzgerX
Merci für die Tips....

Der Fehler lag gar nicht an dem makeModal :oops: , sondern an wx.BuyInfo. Die lassen sich irgend wie nicht zerschtören (Destroy())

Verfasst: Sonntag 25. Juni 2006, 11:18
von gerold
DatenMetzgerX hat geschrieben:sondern an wx.BuyInfo. Die lassen sich irgend wie nicht zerschtören (Destroy())
Hi DatenMetzgerX!

Die Aufrufe von wxBusyInfo() hatte ich vorher schon raus genommen. Trotzdem stürzte das Ding ab. Erst nach den anderen Änderungen funktioniert es bei mir wie gewünscht.

lg
Gerold
:-)

Verfasst: Montag 26. Juni 2006, 08:42
von Francesco
DatenMetzgerX hat geschrieben:Merci für die Tips....

Der Fehler lag gar nicht an dem makeModal :oops: , sondern an wx.BuyInfo. Die lassen sich irgend wie nicht zerschtören (Destroy())
Hi, das kommt mir bekannt vor.
Ich glaube, du musst die Instanz von BusyInfo mit del zerstören und
nicht mit .Destroy()

Verfasst: Sonntag 3. September 2006, 10:49
von DatenMetzgerX
So nun bin ich wiedermal bei einem ähnlichen Problem :roll:

Habe ein Hauptframe... aus dem rufe ich ein Subframe auf ( das MakeModal == True setzt). Nun will ich im Hauptframe auf die "Antwort" des Subframes warten. D.h. Wenn der User den Ok Button klickt ( wx.ID_OK) soll im Hauptframe dann xy abläufen sonst yx. Nur wenn ich if msg.Show() == wx.ID_OK:
mache wartet er nicht. Er zeigt das Frame an und geht gleich weiter ;(

Wie kann mann das relativ einfach umgehen....