Seite 1 von 1

wx.Dialog schliesst, der interpreter nicht!

Verfasst: Samstag 20. September 2008, 14:26
von roschi
hallo!

und ich schon wieder :) heute mit folgendem problem:

ich moechte einen 'wx.Dialog' erzeugen. das klappt auch wunderbar. nur wenn der user den dialog schliesst, wird er wahrscheinlich nicht richtig destroied. jedenfalls ist dann die GUI weg, und der interpreter laeuft weiter. was kann ich da machen? gibt es vielleicht eine funktion, die immer dann aufgerufen wird, wenn der dialog geschlossen wird? ich koennte natuerlich auch ein 'wx.Frame' nehmen und dann dort das resize ausschalten und so, aber ein dialog waer mir da schon lieber...

vielen dank im vorraus!

mfg
roschi

EDIT:
Achja, hier noch der code :):

Code: Alles auswählen

import wx

class Dialog(wx.Dialog):
  def __init__(self):
    wx.Dialog.__init__(self, None, -1, "testdialog", pos=(0, 0), size=(200, 200))

app = wx.App(False)
dlg = Dialog()
dlg.Show()
app.MainLoop()
/EDIT

Verfasst: Samstag 20. September 2008, 15:20
von sea-live
Ein Dialog solte ereignisse des Programes FRAME Panel
dem user nitteilen und kein eigenständiges Gui Darstellen

Code: Alles auswählen

# -*- coding: cp1252 -*-

import  wx


#---------------------------------------------------------------------------

class Frame(wx.Frame):
    def __init__(
            self, parent = None, ID = 1, title = "Dir Dialog", pos=wx.DefaultPosition,
            size=(400,400), style= wx.DEFAULT_FRAME_STYLE ^ (wx.RESIZE_BORDER | wx.MAXIMIZE_BOX)
            ):

        wx.Frame.__init__(self, parent, ID, title, pos, size, style)
        panel = wx.Panel(self, -1)

        #Button
        button = wx.Button(panel, 1003, "Beenden")
        button.SetPosition((150, 300))
        self.dir = wx.Button(panel, -1, "Create and Show a DirDialog", (50,50))
        self.Bind(wx.EVT_BUTTON, self.OnButton, self.dir)

        self.Bind(wx.EVT_BUTTON, self.OnCloseMe, button)
        self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
    def OnCloseMe(self, event):
        self.Close(True)

    def OnCloseWindow(self, event):
        self.Destroy()

    def OnButton(self, evt):
        # In this case we include a "New directory" button. 
        dlg = wx.DirDialog(self, "Choose a directory:",
                          style=wx.DD_DEFAULT_STYLE
                           #| wx.DD_DIR_MUST_EXIST
                           #| wx.DD_CHANGE_DIR
                           )

        # If the user selects OK, then we process the dialog's data.
        # This is done by getting the path data from the dialog - BEFORE
        # we destroy it. 
        if dlg.ShowModal() == wx.ID_OK:
            print('You selected: %s\n' % dlg.GetPath())

        # Only destroy a dialog after you're done with it.
        dlg.Destroy()
        

def main():
    
    app = wx.PySimpleApp()
    fenster = Frame()
    fenster.Center()
    fenster.Show()
    app.MainLoop()


if __name__ == "__main__":
    main()

Verfasst: Samstag 20. September 2008, 15:39
von roschi
hallo!

ja, in meinem ganzen programm wird der dialog auch von einem frame aufgerufen. das entscheidende war jetzt

Code: Alles auswählen

self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
ein grosses dankeschoen dafuer!
ich werde es gleich mal einbauen.

mfg
roschi

Verfasst: Samstag 20. September 2008, 19:44
von sea-live
Der dialog solte sich aber wenn möglich auch selbst zerstören siehe oboges beispiel
dlg.Destroy()