Variabel übergabe zwischen zwei Klassen

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Zandi178
User
Beiträge: 6
Registriert: Donnerstag 16. August 2007, 11:10
Kontaktdaten:

Variabel Übergabe zwischen zwei Klassen

Hallo erstmal,
ich habe folgendes Problem.
Ich Programmiere gerade ein Programm wo ich aus einem Logfile was ein Server schreibt, Daten auslesen kann diese werden dann zuerst in eine Datenbank geschrieben und danach aus der Datenbank in ein ListCtrl übertragen dort kann man sie dann schön Sortiert in einem ListCtrl (Ist in einer Klasse namens Tabelle) bestaunen. Bei Betätigen der so genannten wx.EVT_LIST_COL_CLICK (Schaltfläche namens Typ)wird schon mal sortiert. Nun habe ich ein wx.Menu, Bei den Eigenschaften Typ / Option
Öffne ich nun ein Dialog Fenster (Ist in einer neuen Klasse namens TestDialog, welches von Tabelle erbt).
So auf diesem Dialog Fenster befindet sich eine RadioBox.
Wo ich, nun Auswählen kann, ob ich bei der Art Typ Nur Fehler oder Warnung oder Meldung oder Störung (und einige mehr) angezeigt bekommen möchte.
So nun wähle ich also mit der RadioBox aus, was ich gleich nur angezeigt bekommen haben möchte. Nehmen wir z.b. Meldung.
Innerhalb dieser Klasse TestDialog. Kann ich die Variabel die Self.Typ heißt abrufen. Und bekomme auch das Ergebnis, dass ich Meldung ausgewählt habe.
Nun gibt es zwei Möglichkeiten, innerhalb der Klasse TestDialog aus der Datenbank ins ListCtrl lesen und nur die Typen Meldung angezeigt zubekommen. Wobei der Fehler auftaucht. Beim Löschen der Aktuellen Einträge, die sich im ListCtrl befinden. Das es kein Self.list (Name des ListCtrl) gibt. oder die zweite Variante, Die Variabel Self.Typ (die den Wert aus der RadioBox trägt) von der Klasse TestDialog in die Klasse Tabelle zu übertragen.
Bei meinen Versuchen kam als Ergebnis immer 0 raus. („Nein Meldung steht in der RadioBox nicht auf der Reinfolge 0“), auch bei einer anderen Auswahl Störung z.b. kam als Ergebnis 0 raus.
Das ist also mein Problem, Wie kann ich auf der einfachsten weise Einen Variabel Übertrag machen von der Klasse TestDialog in die Klasse Tabelle. Von der Variante im TestDialog aus der Datenbank zu lesen halt ich mich mal fern, finde das nicht wirklich sehr effektive, wo ja auch noch die Sache wäre das er kein Self.list kennt.

Habe auch schon in Forum am Wochenende Gesucht aber habe nichts dem entsprechend gefunden nur ein Ähnliches Programm von Benutzer BlauerFasan mit dem Beitrag Event-Handling eines ListControls; Sortierung vornehmen, Der mir mit seinem Beitrag fürs Sortieren schon geholfen hat. Des Weiteren mehrer Klassenkameraden gefragt und auch da konnte mir keiner weiterhelfen.
Nun ist meine Letzte Chance eine schöne Lösung von euch zu bekommen, damit ich endlich weitermachen kann.

Mit freundlichen Grüßen Zandi

QuellText Normal

#Hier bin ich nun im Unterprogramm OnOption was ich verwende um in #die Klasse TestDialog zuwechseln.

Code: Alles auswählen

def OnOption(self, event):
        
        EinstellungDialog = TestDialog(self, -1, "Einstellungen")
        EinstellungDialog.CenterOnScreen()
        EinstellungDialog.ShowModal()
        self.OnEinstellung()

#jetzt befinden wir uns in der Klasse TestDialog

Code: Alles auswählen

    def OnRadio(self, event):
        self.Typ =str(self.AuswahlTypen[event.GetInt()])
#Bei betätigen von einem Button(Uebernehmen), der sich auf dem Dialog #Fenster befindet kommen wir in das Unterprogramm OnClickUeber

Code: Alles auswählen

    def OnClickUeber(self, event):
        if self.Typ == 'Alle Typen': pass
        if self.Typ == 'Meldung':
            self.Einstellung.Destroy()
#Wenn Meldung richtig ist dann Schliessen wir das DialogFenster was #Self.Einstellung heißt und kehren zurück zum Self.OnOption, was sich #aber in der Klasse Tabelle befindet, das Funktioniert auch
#und von dort wechseln wir dann in Self.OnEinstellung
#Nun sind wir wieder in der Klasse Tabelle, Hier connecten wir erstmal #neu auf die Datenbank und Sortieren wir einfach erstmal wieder Nach #Typ, umzuschauen das wir bis dorthin gekommen sind, nun ist aber die #Frage WIE übergebe ich die Variabel Self.Typ in
#der Klasse TestDialog zur Klasse Tabelle also zum Unterprogramm

Code: Alles auswählen

OnEinstellung.

    def OnEinstellung(self):

        try:
            from pysqlite2 import dbapi2 as sqlite
        except:
            from sqlite3 import dbapi2 as sqlite
        myconn = sqlite.connect ('f:/20070719.db3', isolation_level = None)
        self.cursor = myconn.cursor()
        try:
            self.list.DeleteAllItems()
        except:
            print ‘Loeschen der ListCtrl fehlgeschlagen'
        
        self.cursor.execute ("SELECT * FROM csv ORDER by Typ"), self.Read()
	

SO ich hoffe jemand Steigt durch diesen Gewusel durch und kann mir Helfen

UNd bitte verzeiht mir meine Übermäßigen Rechtschreibfehler, habe mir schon mühe gegeben

edit:
Meine versuche habe ich jetzt, nicht drin da sie auch nicht mehr existieren und ich mich auch nicht mehr erinnern kann, wie ich das gemacht habe, und da es schon irgend wann abends um 23 uhr war, habe ich auch nicht dran gedacht die einfach auszukommentieren sondern hab sie einfach wieder gelöscht damit das Programm wenigstens so funktioniert
Zandi178
User
Beiträge: 6
Registriert: Donnerstag 16. August 2007, 11:10
Kontaktdaten:

So da mir ja leider keiner eine Antwort geben konnte Ihr entweder selbs nichts wusstet, oder es zu leicht fandet.+
Was sehr schade ist, dass mich wenn dann keiner drauf aufmerksam gemacht hat auf die eigenschaften.


Aufjedenfall habe ich die Lösung jetzt selbs rausbekommen und die geht wiefolgt, für Leute die es vll Intressiert.

Nach dem ich Ausgewählt habe, was ich möchte und im Dialog Fenster auf Übernehmen klicke, schließt das Dialog Fenster und ich bin in der Klasse Tabelle wieder, nun dachte ich mir einfach du rufst einfach das Unterprogramm aus der Klasse TestDialog auf, und holst dir das ergebniss was du vorher eingetragen hast.




Das sieht dann wie folgt aus





Hier der Quell text


Hier befinden wir uns in der Klasse TestDialog

Code: Alles auswählen

    def OnClickUeber(self, event):
        self.Einstellung.Destroy()

    def OnJa(self):
        return self.Typ
        return self.Typpos
        
    def OnRadio(self, event):

        self.Typ = self.AuswahlTypen[event.GetInt()]
        self.Typpos = self.AuswahlTypen[event.GetInt()]

Aus der Klasse Tabelle rufen wir das Unterprogram aus TestDialog wie folgt auf.


Code: Alles auswählen

    def OnOption(self, event):

        EinstellungDialog = TestDialog(self, -1, "Einstellungen", self.Typ, self.Typpos)
        EinstellungDialog.CenterOnScreen()
        EinstellungDialog.ShowModal()
        self.Typ = EinstellungDialog.OnJa()
        self.Typpos = EinstellungDialog.OnJa()
        print self.Typ
        print self.Typpos
        self.OnEinstellung()
# Die Variabel Self.Typ und Self.Typpos müssen natprlich auch bei der eröffnung der Klasse TestDialog drin stehen, denk ich zumindestens

Code: Alles auswählen

class TestDialog(wx.Dialog):
    def __init__(self, parent, ID, title, Typ, Typpos, size=wx.DefaultSize, pos=wx.DefaultPosition, style=wx.DEFAULT_DIALOG_STYLE):
        self.Einstellung = wx.PreDialog()
        self.Einstellung.Create(parent, ID, title, pos, size, style)
        self.PostCreate(self.Einstellung)
Mfg Zandi
Ps: vll hilft es ja manchen Leuten vll auch nicht.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Servus
und Guten was auch immer(Tag)

Wie bekomme ich die Globale Variable (((ti))) aus a.py
in den TITEL von b.py
code b.py

Code: Alles auswählen

import wx

wx.SetDefaultPyEncoding("iso-8859-15")

class MyModalFrame(wx.Frame,):
   
    def __init__(self,parent= None, title = 'hier soll ti stehen' , size = wx.Size(500, 600)):
        wx.Frame.__init__(self,parent, -1, title, size = size)
        panel = wx.Panel(self)
        panel.SetBackgroundColour("gray")
        self.MakeModal(True)
        self.Bind(wx.EVT_CLOSE, self.on_close)
           
    def on_close(self, event = None):
        self.MakeModal(False)
        event.Skip()

def main():
    app = wx.PySimpleApp()
    fa = MyModalFrame()
    fa.Center()
    fa.Show()
    app.MainLoop()

if __name__ == "__main__":
    main()
code a.py

Code: Alles auswählen

import wx
from b import MyModalFrame
wx.SetDefaultPyEncoding("iso-8859-15")

global ti
ti='test'

class MyMainFrame(wx.Frame):
   
    def __init__(
        self, parent = None, title = "Example", size = wx.Size(350, 220)
    ):
        wx.Frame.__init__(self, parent, -1, title, size = size)
       
        panel = wx.Panel(self)
       
        vbox_main = wx.BoxSizer(wx.VERTICAL)
        panel.SetSizer(vbox_main)
       
        vbox_main.AddStretchSpacer()
       
        btn_modalframe = wx.Button(panel, label = u"Modales Frame anzeigen")
        btn_modalframe.Bind(wx.EVT_BUTTON, self.show_modal_frame)
        vbox_main.Add(btn_modalframe, 0, wx.CENTER)
       
        vbox_main.AddStretchSpacer()
        
   
    def show_modal_frame(self, event = None):
        self.modal_frame = MyModalFrame()
        self.modal_frame.Show()

def main():
    """Testing"""
    app = wx.PySimpleApp()
    f = MyMainFrame()
    f.Center()
    f.Show()
    app.MainLoop()

if __name__ == "__main__":
    main()
Antworten