wx.Dialog schliesst, der interpreter nicht!

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

Samstag 20. September 2008, 14:26

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
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Samstag 20. September 2008, 15:20

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()
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

Samstag 20. September 2008, 15:39

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
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Samstag 20. September 2008, 19:44

Der dialog solte sich aber wenn möglich auch selbst zerstören siehe oboges beispiel
dlg.Destroy()
Antworten