Wie kann man ein Frame neu erstellen (refresh, update) ?

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Spleen
User
Beiträge: 16
Registriert: Donnerstag 2. Juli 2009, 09:41

Hey,

da ich in Python und vorallem in wxPython noch nicht so fit bin, wird die Frage warscheinlich ziemlich blöd rüberkommen. Aber ich würde gerne wissen wie ich ein Frame neu erstellen/zeichnen/konstruieren kann.

Ich habe ein Haupt-Frame in dem sich eine ListCtrl befindet. Diese zeigt mir alle Datensätze meiner kleinen Datenbank an. Wenn ich einen Neuen Datensatz hinzufügen möchte, soll ein weiteres Frame(Hinzufügen) geöffnet werden in welchen ich dann den neuen Datensatz eintrage und mit drücken des Buttons(Hinzufügen) erstelle. Dabei soll das Frame(Hinzufügen) geschlossen werden und das Haupt-Frame mir die aktualisierte ListCtrl anzeigen.

Bei mir befinden sich das Haupt-Frame und das Frame(Hinzufügen) in jeweils separaten Modulen/Dateien.
Haupframe --> FilmarchivFrame1
Frame(Hinzufügen) --> FilmarchivFrame2

So weit ich es herrausgefunden habe soll das mit dem Befeh refresh() oder update() funktionieren. Aber ich komme nicht dahinter wie und wo man sie anwendet. Oder ich bin völlig auf dem falschen Weg.

Hier der Quellcode (in der abgespeckten Version):

#Haupt-Frame:

Code: Alles auswählen

class Frame1(wx.Frame):

    def _init_coll_listCtrl_Film_Tabelle_Columns(self, parent):
        parent.InsertColumn(col=0, format=wx.LIST_FORMAT_RIGHT, heading='ID',
            width=-1)
        parent.InsertColumn(col=1, format=wx.LIST_FORMAT_LEFT, heading='Kunde',
            width=-1)

        liste = FilmarchivFunktionen1.tabelle_anzeigen()
        for i in liste:
            parent.InsertStringItem(0, str(i[0]))
            parent.SetStringItem(0,1, i[1])

    def _init_ctrls(self, prnt):
        wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt,
              pos=wx.Point(156, 34), size=wx.Size(1288, 1058),
              style=wx.DEFAULT_FRAME_STYLE, title='Filmarchiv')

        self.panel1 = wx.Panel(id=wxID_FRAME1PANEL1, name='panel1', parent=self,
              pos=wx.Point(0, 0), size=wx.Size(1280, 981),
              style=wx.TAB_TRAVERSAL)

        self.SetClientSize(wx.Size(1280, 1024))


    def _init_coll_toolBar1_Tools(self, parent):
        parent.DoAddTool(bitmap=wx.Bitmap(u'Icons/application_add.png',
            wx.BITMAP_TYPE_PNG), bmpDisabled=wx.NullBitmap,
            id=wxID_FRAME1TOOLBAR1TOOLS_HINZUFUEGEN, kind=wx.ITEM_NORMAL,
            label='', longHelp='Einen neuen Film hinzuf\xfcgen',
            shortHelp='Hinzuf\xfcgen...')

        self.Bind(wx.EVT_TOOL, self.OnToolBar1Tools_hinzufuegenTool,
            id=wxID_FRAME1TOOLBAR1TOOLS_HINZUFUEGEN)

        parent.Realize()


    def __init__(self, parent):
        self._init_ctrls(parent)


    def OnToolBar1Tools_hinzufuegenTool(self, event):
        settingWindow = FilmarchivFrame2.Frame_Hinzufuegen(self)
        settingWindow.Show(True)
#Frame(Hinzufügen):

Code: Alles auswählen

class Frame_Hinzufuegen(wx.Frame):
    def _init_ctrls(self, prnt):
        wx.Frame.__init__(self, id=wxID_FRAME_HINZUFUEGEN,
            name='Frame_Hinzufuegen', parent=prnt, pos=wx.Point(172, 412),
            size=wx.Size(908, 343), style=wx.DEFAULT_FRAME_STYLE,
            title='Hinzuf\xfcgen')

        self.SetClientSize(wx.Size(900, 309))
    
        self.panel1 = wx.Panel(id=wxID_FRAME_HINZUFUEGENPANEL1, name='panel1',
            parent=self, pos=wx.Point(0, 0), size=wx.Size(900, 309),
            style=wx.TAB_TRAVERSAL)

        self.staticText_Kunde = wx.StaticText(id=wxID_FRAME_HINZUFUEGENSTATICTEXT_KUNDE,
            label='Kunde:', name='staticText_Kunde', parent=self.panel1,
            pos=wx.Point(15, 85), size=wx.Size(75, 21), style=0)

        self.textCtrl_Kunde = wx.TextCtrl(id=wxID_FRAME_HINZUFUEGENTEXTCTRL_KUNDE,
            name='textCtrl_Kunde', parent=self.panel1, pos=wx.Point(90, 85),
            size=wx.Size(400, 21), style=0, value='')

        self.button_Erstellen = wx.Button(id=wxID_FRAME_HINZUFUEGENBUTTON_ERSTELLEN,
            label='Erstellen', name='button_Erstellen', parent=self.panel1,
            pos=wx.Point(723, 275), size=wx.Size(75, 25), style=0)

        self.button_Erstellen.Bind(wx.EVT_BUTTON, self.OnButton_ErstellenButton,
            id=wxID_FRAME_HINZUFUEGENBUTTON_ERSTELLEN)


    def __init__(self, parent):
        self._init_ctrls(parent)


    def OnButton_ErstellenButton(self, event):
        werte = []
        id = FilmarchivFunktionen1.id_bestimmen()
        kunde = self.textCtrl_Kunde.Value
        werte.append(str(id))
        werte.append(kunde)
        FilmarchivFunktionen1.film_hinzufuegen(werte)
        self.Close()   
Wäre sehr dankbar wenn mir jemand helfen könnte da ich mitlerweile echt verzweifelt bin. Schon zu viel zeit investiert - leider ohne Erfolg.
Benutzeravatar
martin101986
User
Beiträge: 85
Registriert: Montag 3. Dezember 2007, 19:15
Wohnort: Steiermark, Österreich

Hallo,

wenn in deiner Datenbank ein Datensatz hinzugefügt wird soll dein GUI informiert werden dass ein neuer Datensatz angelegt wurde.

z.B. wird bei deinem Frame eine Methode von der film_hinzufuegen Funktion aufgerufen und die Id des Datensatzes übergeben. Diese Methode holt sich dann die Daten anhand der Id aus der Datenbank und fügt sie in die Liste ein.

Grüße Martin
Antworten