wx.Dialog

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Braindie
User
Beiträge: 20
Registriert: Mittwoch 10. Juni 2009, 07:54

Hallo,

wenn ich eine Standard-Dialogbox im Hauptframe erstelle und öffne, wird der Text wie im Beispielcode Zeile 23 erst ausgegeben wenn die Dialogbox positiv beendet wird.
Wenn ich eine eigene Klasse für meine selbstgestalteten Dialogboxen schreibe und diese dann aufrufe wird der Text Zeile 28 gleich ausgegeben.

Wie kann ich den Code ändern, dass auch die Zeile 28 erst ausgegeben wird, wenn die Dialogbox beendet wird.

Vielen Dank

Stefan

Hier der Testcode:

Code: Alles auswählen

#!/usr/bn/env python
# -*- coding: iso-8859-15 -*-
import os
import wx

class MyFrame(wx.Frame):
    def __init__(
        self, parent = None, title = "test", size = wx.Size(550, 420)):
        '''main frame'''
        wx.Frame.__init__(self, parent, -1, title, size = size)
        panel=wx.Panel(self)
        self.button = wx.Button(panel, -1, "variante 1", pos=(100, 150))
        self.button2 = wx.Button(panel, -1, "variante 2", pos=(300, 150))
        self.Bind(wx.EVT_BUTTON, self.on_button, self.button)
        self.Bind(wx.EVT_BUTTON, self.on_button2, self.button2)
    wildcard = "TxT files (*.txt)|*.txt|All files (*.*)|*.*"

    def on_button(self, event):
        dlg = wx.FileDialog(self, "Open txt file...",
                os.getcwd(), style=wx.OPEN,
                wildcard=self.wildcard)
        if dlg.ShowModal() == wx.ID_OK:
                print 'Ich erscheine wenn die Dialogbox beendet ist'
    
    def on_button2(self, event):
        self.modal_frame = MyNewDialog(self)
        self.modal_frame.Show()
        print 'Ich erscheine wenn der Button gedrück wird.'

class MyNewDialog(wx.Dialog):
    def __init__(self, parent, title = "Test2", size =(200, 200)):
        wx.Dialog.__init__(self, parent, -1, title, size = size)
        panel = wx.Panel(self, -1, size=(200, 200))
        self.button3 = wx.Button(panel, -1, "Exit", pos=(100, 100))
        self.Bind(wx.EVT_BUTTON, self.on_closeme, self.button3)
        self.Bind(wx.EVT_CLOSE, self.on_close)
        self.MakeModal(True)
        
    def on_close(self, event = None):
        self.MakeModal(False)
        event.Skip()
        
    def on_closeme(self, event):
        self.Close(True)

if __name__ == "__main__":
    
    app=wx.PySimpleApp()
    frame = MyFrame()
    frame.Show()
    app.MainLoop()
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Versuch mal statt "Show" in Zeile 27 ein "ShowModal".
Das Leben ist wie ein Tennisball.
Braindie
User
Beiträge: 20
Registriert: Mittwoch 10. Juni 2009, 07:54

Vielen Dank,

ich hab schon einiges probiert aber auf das offensichtliche bin ich nicht gekommen.

it works
:D

Stefan
Antworten