Seite 1 von 1

einem importierten Modul ein Objekt bekannt machen??

Verfasst: Dienstag 11. Mai 2010, 10:52
von mathi
Hallo,

ich habe einen Hauptframe, in dem ich über über Button Unterprogramme aufrufe, die ich natürlich vorher importiere.
Momentan wird in jedem Unterprogramm mit

Code: Alles auswählen

self.tempdir=mkdtemp(suffix='TemppP')
der erforderliche Temp-Ordner erstellt.

Wenn ich aber im Hauptframe den Temp-Ordner erstelle, wie kann ich diesen dann in den Unterprogrammen ansprechen??

Gruß Mathi

Re: einem importierten Modul ein Objekt bekannt machen??

Verfasst: Dienstag 11. Mai 2010, 10:54
von ms4py
Durch Parameter-Übergabe.
(Entweder dem Konstruktur bei einem Klassendesign, oder eben deinen Funktionen)

Re: einem importierten Modul ein Objekt bekannt machen??

Verfasst: Dienstag 11. Mai 2010, 11:10
von mathi
Danke, ich stehe aber im Moment auf dem Schlau, denn alle versuche der Übergabe sind leider gescheitert...

hier mal ein kleines Textbeispiel, da es recht kurz ist, habe ich es gleich so gepostet.
Wie müsste self.tempdir übergeben werden??

Code: Alles auswählen

#-*- coding: iso-8859-15 -*-

import wx,modul1,modul2
from tempfile import mkdtemp

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


class MyFirstFrame(wx.Frame):
    """First Frame    """
    def __init__(self, parent, id , title): 
        """ 
        Frame initialisieren und aufbauen 
        """         
        
        wx.Frame.__init__(self, parent, id, title, style=wx.DEFAULT_DIALOG_STYLE | wx.MINIMIZE_BOX )
        
        self.SetAutoLayout(True)

        # Basispanel 
        panel = wx.Panel(self,style=wx.SIMPLE_BORDER) 
        panel.SetBackgroundColour(wx.Colour(223,238,249))
        
        grid_sizer = wx.GridBagSizer(10, 20) 

        btn1 = wx.Button(panel,-1, '  Modul 1')
        grid_sizer.Add(btn1, (1, 1),(1,1),wx.EXPAND | wx.ALL)

        btn2 = wx.Button(panel, -1,'  Modul 2') 
        grid_sizer.Add(btn2, (1, 2),(1,1),wx.EXPAND | wx.ALL)
              
        panel.SetSizer(grid_sizer) 
        panel.Fit()
        self.Fit()
        
        # Button-Click an Event-Handler binden
        btn1.Bind(event = wx.EVT_BUTTON, handler = self.show_modul1)
        btn2.Bind(event = wx.EVT_BUTTON, handler = self.show_modul2)

        self.tempdir=mkdtemp(suffix='TemppP') # <---------- hier wird self.tempdir erzeugt


    def show_modul1(self, event = None): 
        """ 
        Dieser "Event Handler" zeigt 'Modul 1' an, 
        und hier müsste ja self.tempdir übergeben werden, 
        nur wie???? 
        """ 
        modul1.modul1(parent=self)
        
        
    def show_modul2(self, event = None): 
        modul2.modul2(parent=self)       
      
def main(): 
    """Main""" 
    
    app = wx.App()        
    MyFrame = MyFirstFrame(None, -1, "*** FirstFrame ***")
    app.SetTopWindow(MyFrame)
    MyFrame.Show(True)
    app.MainLoop()
       
       
if __name__ == "__main__": 
    main()

Re: einem importierten Modul ein Objekt bekannt machen??

Verfasst: Dienstag 11. Mai 2010, 11:24
von ms4py
Wenn du es so machst (die Instanz als `parent` übergeben), kannst du im Modul doch einfach mit `parent.tempdir` darauf zugreifen!! Beschäftige dich DRINGEND mit den (OO-)Grundlagen, bevor du so Späße wie GUI-Programmierung anfängst...

Re: einem importierten Modul ein Objekt bekannt machen??

Verfasst: Dienstag 11. Mai 2010, 11:44
von mathi
Vielen Dank....auch für die Kritik

edit:
wie kann ich sowas lernen?
Die meisten Literaturstellen sind doch Referenzen, hätte ich das z.B. mit "Python gepackt" herauslesen können?
in "Das Python3.1-Tutorial auf Deutsch" konnte ich dazu erstmal auch nichts finden.... :oops:

Re: einem importierten Modul ein Objekt bekannt machen??

Verfasst: Dienstag 11. Mai 2010, 15:04
von Dav1d
Wieso liest du ein 3.1 Tutorial?

ms4py: naja wieso soll man immer OOP schon vorher können? Ich hab sie erst durch GUI's (wxWidgets) kapiert.

Re: einem importierten Modul ein Objekt bekannt machen??

Verfasst: Dienstag 11. Mai 2010, 15:24
von BlackJack
@Dav1d: OOP ist von GUI-Programmierung unabhängig, man kann OOP also vorher lernen und schon halbwegs beherrschen wenn man mit GUI-Programmierung beginnt. Dann versteht man die auch besser. Andererseits kann GUI-Programmierung das OOP-Verständnis auch festigen oder gar vertiefen, weil das ein Paradebeispiel für den sinnvollen Einsatz von OOP ist.

Was bei GUI-Programmierung in der Regel neu für die meisten ist, ist die ereignisbasierte Programmierung, also der nichtlineare Programmfluss. Wenn man OOP vorher nicht kann, hat man beim Einstieg in die GUI-Programmierung also zwei neue "Probleme" und nicht nur eines.

Re: einem importierten Modul ein Objekt bekannt machen??

Verfasst: Dienstag 11. Mai 2010, 15:31
von Dav1d
Kennen muss man die OOP, das ist klar, ich meinte mit können: beherrschen

Re: einem importierten Modul ein Objekt bekannt machen??

Verfasst: Dienstag 11. Mai 2010, 15:31
von ms4py
mathi hat geschrieben:in "Das Python3.1-Tutorial auf Deutsch" konnte ich dazu erstmal auch nichts finden.... :oops:
Kapitel "Klassen" ?! :!:

Edit: @Dav1d, ganz genau, das meinte ich mit Grundlagen, die dem OP offensichtlich fehlen ;)