klassen unter python

Plattformunabhängige GUIs mit wxWidgets.
Antworten
The Hit-Man
User
Beiträge: 407
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

Dienstag 3. Juni 2008, 11:16

ich habe mir eine klasse geschrieben, die sich tools nennt. in meinem hauptformular erstelle ich natürlich eine kopie von ihr, um sie benutzen und zwar mit

Code: Alles auswählen

mTools = Tools ()
im hauptformular kann ich natürlich alles nutzen, methoden anspringen, eigenschaften ändern. jetzt brauche ich aber genau die gleiche kopie, von der klasse, in einem anderen formular, da ich von dem anderen fenster, eigenschaften der klasse ändern muß.
jemand ne ahnung, wie man das macht?
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 3. Juni 2008, 11:21

Du übergibst die Instanz, also mTools an die richtige Stelle?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
The Hit-Man
User
Beiträge: 407
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

Dienstag 3. Juni 2008, 11:24

ich übergebe nichts. habe mein hauptformular, in dem ich eine instanz von meiner tool klasse mache, die ich im hauptformular auch nutzen kann. ich habe im konstruktor einige flags, die ich mit einem anderen fenster setzten muß und auch dort die methoden anspringen muß. das ist aber momentan im anderen fenster nicht möglich, da die instanz ja vom hauptformular gemacht worden ist. ich könnte eine neue instanz im anderen formular anlegen, aber es wäre ja nicht die selbe.

wie meinst du das mit "instanz übergeben" ????
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 3. Juni 2008, 11:28

Du sprichst hier von Fenster. Meinst du damit GUI Fenster? Welches Toolkit?

Mit mTools = Tools() Erstellst du ja eine Instanz von Tools und bindest die an den Namen mTools... Und dieses mTools Objekt musst du an die Stelle übergeben wo du drauf zugreifen möchtest...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
The Hit-Man
User
Beiträge: 407
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

Dienstag 3. Juni 2008, 11:33

ich nutze die wx widgets und rufe vom hauptfenster ein anderes fenster auf. das soll zum konfigurieren, der anwendung sein. und von dem konfigurations-fenster, möchte ich gerne auf die mTools zugreifen.

EDIT:
oder gibts es ne methode, die klasse also, die instanz einfach global zu machen? muß ja eh viel von außen drauf zu greifen. dort sind ja meine ganzen tools drin, die ich für mein programm brauche.
The Hit-Man
User
Beiträge: 407
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

Dienstag 3. Juni 2008, 15:25

hmmm, ich versuche mal nen anderes beispiel. nehm wir einfach 2 wxwidgets fenster ( sind ja auch klassen ) und ich möchte von dem einem zum anderen fenster, zum beispiel textfelder und so weiter ändern. wie komme ich also an die fensterklasse ran?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 3. Juni 2008, 16:13

The Hit-Man hat geschrieben:nehm wir einfach 2 wxwidgets fenster ( sind ja auch klassen ) und ich möchte von dem einem zum anderen fenster, zum beispiel textfelder und so weiter ändern. wie komme ich also an die fensterklasse ran?
Hallo The Hit-Man!

Es ist nicht fair, einfach alles klein zu schreiben. Das erschwert das Lesen deiner Beiträge für mich erheblich. Ich wollte es schon lassen und dir nicht antworten.

Und jetzt zur Frage. Vielleicht bringen dich diese Beispiele auf Ideen:
- http://www.python-forum.de/post-78061.html#78061
- http://www.python-forum.de/post-81531.html#81531
- http://www.python-forum.de/post-65622.html#65622

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
The Hit-Man
User
Beiträge: 407
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

Dienstag 3. Juni 2008, 20:43

Es ist nicht fair, einfach alles klein zu schreiben. Das erschwert das Lesen deiner Beiträge für mich erheblich. Ich wollte es schon lassen und dir nicht antworten.
Ja, tut mir leid. Ich weiß, ist ne kleine Schwäche von mir. Bin recht faul geworden, mit der Zeit. Schreibe im Netz eigelich immer klein, hat sich bei mir so eingebürgert. Ich tippe des weiteren immer ziemlich schnell und die Shift-Taste stört meist ein wenig. Bitte um Entschuldigung, werde versuchen das zu ändern.
The Hit-Man
User
Beiträge: 407
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

Donnerstag 5. Juni 2008, 08:27

ähm, ich habe nen neuen Ansatz. Hatte gestern mit nem Freund gequatscht, der C++ Freak ist. Er meinte, ich muß diese Klasseninstanz einfach der neuen Klasse mitgeben, die ich auchrufe, mit Parametern. Bin irgendwie nen bischen verwirrt, gerade.
BlackJack

Donnerstag 5. Juni 2008, 09:11

Das ist kein neuer Ansatz, sondern das was jens und Gerold schon vorgeschlagen haben. Und Dein Freund hat recht, trotz dem er in C++ programmiert. ;-)
The Hit-Man
User
Beiträge: 407
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

Donnerstag 5. Juni 2008, 09:41

jub, ich mag ja eigentlich Klassen, aber hatte zu Anfangs echt Probleme gehabt, diese überhaupt zu verstehen, obwohl sie ja eigentlich total logisch sind. Hatte mal unter VisualFoxPro programmiert. Das geht zwar schnell mal eben ne Klasse zusammen zu klicken, allerdings weiß man dann nie genau, wie und wo diese Klasse dann auch arbeitet. Erst jetzt, wo ich selber Klassen schreibe, lerne ich dazu. Werde jetzt genau das mal mit kleinen Scripten ausprobieren. Denn es ist nen riesen Aufwand, wenn man auch seine Klasse, die man überall braucht nicht zugreifen kann. Man programmiert ja alles doppelt und dreifach. Der Code wird total unübersichtlich dadurch. Je mehr ich an meinem Projekt programmiere, desto mehr fällt mir auf, was ich alles einfacher hätte machen können. Doch ich denke, das ist bei einem Anfänger, wie mir, eher normal. Was habe ich damals das Programmieren in Assembler auf dem C64er geliebt. Da gabs ja keine Klassen ;)
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 5. Juni 2008, 09:52

Hier mal ein dummes Beispiel was ich meinte:

Code: Alles auswählen

# -*- coding: utf-8 -*-

class GlobalObjects(object):
    """
    Hierdran hängen wir alle globalen Objekte, die man so braucht.
    Die objects werden überall mit hin geschleppt.
    """
    pass


class Printer(object):
    def zeigmal(self, txt):
        print "zeigmal:", txt

class Logger(object):
    def log(self, txt):
        print "log:", txt


def sub_sub_routine(objects):
    objects.log.log("blabla")
    objects.printer.zeigmal("jup")


def sub_routine(objects):
    objects.printer.zeigmal("wow1")

    sub_sub_routine(objects)


def mein_programm():
    # Erstelle mein Objekt, welches überall mit hin kommt.
    objects = GlobalObjects()

    # Packe alle Dinge dran, die ich brauchen kann
    objects.printer = Printer()
    objects.log = Logger()

    sub_routine(objects)


mein_programm()
Wobei das ein wenig die Sicht ist, wie ich es in PyLucid also in der WebProgrammierung mache...

Wenn man nichts mit Threads zu tun hat, kann man auch was im Modul Level machen. Dann muß man nicht ein Objekt die ganze Zeit überall hin mit schleppen, sondern kann es einfach importieren...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
The Hit-Man
User
Beiträge: 407
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

Donnerstag 5. Juni 2008, 13:30

aha, danke, ich denke ich habe es verstanden ;) Ist eigentlich recht einfach, wenn man es einmal richtig erklärt bekommt ;). Allerdings hatte ich es mit meinem Programm jetzt anders gelöst, auch wenn mir nen Freund wieder sagt, das es unschön wäre. Mein Programm ist aber nicht sooooo groß, das es unübersichtlich wirkt.
Ich hatte nämlich bei wxglade gesehen, das ich beide Fenster in eine Datei packen kann. wenn ich dann ganz oben meine ToolsKlasse instanziere, kann ich sie von beiden Fenstern aus ansprechen. Genau so, wollte ich es auch gehabt haben :) Wenn man natürlich mehere Fenster, sprich mehere Dateien, Klassen hat, würde ich es wohl so machen, wie Du in Deinem Beispiel gerade.
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 5. Juni 2008, 13:49

The Hit-Man hat geschrieben:Ich hatte nämlich bei wxglade gesehen, das ich beide Fenster in eine Datei packen kann. wenn ich dann ganz oben meine ToolsKlasse instanziere, kann ich sie von beiden Fenstern aus ansprechen.
Das meinte ich mit, global machen auf Modul Ebene. Du kannst in Python immer mehrere Klassen in ein Modul stopfen. Wenn es zu unübersichtlich ist, kannst du es trennen, dennoch per from ... import ... wieder das Objekt "herreinholen".

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten