Objektpointer

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Liebe Freunde,

    Nach langer Weigerung hab ich mich nun doch entschlossen mich etwas mit Python und Tkinter am Raspi zu beschäftigen.

    Jetzt bin ich relativ bald auf folgendes Problem gestossen, wo ich nichts gescheites im Netz finde (oder es auch nicht verstehe)

    z.B ich habe ein Entry Feld

    E1 = Entry(Frame1, font="Helvetica 20 bold", width=25, foreground='red')

    E1.grid(row=0, column=0, padx=3, pady=3)

    E1.delete(0,END)

    E1.insert(0,"Hallo Freunde")

    Jetzt würde ich aber gerne über eine Pointervariable auf dieses Feld zugreifen wie es in den meisten anderen Programmiersprachen möglich ist.

    z.B. theoretisches Construct

    PointerToEntryField = ADR_OFF(E1)

    (*PointerToEntryField).insert(0,"Hallo Freunde")

    Ist sowas prinzipiell möglich, und wie würde der Syntax lauten ?

    Wie gesagt ich bin totaler Python Anfänger:helpnew:

    Vielen Dank

    :danke_ATDE:

  • Python kennt keine Pointer.

    Python
    E1 = Entry(Frame1, font="Helvetica 20 bold", width=25, foreground='red')
    E1.grid(row=0, column=0, padx=3, pady=3)
    E1.delete(0,END)
    E1.insert(0,"Hallo Freunde")

    Du hast in der Variable E1 eine Referenz auf eine Instanz von Entry (dein Objekt).

    Diese kannst du einfach verwenden, und z.B. eine Methode des Objekts aufzurufen (machst du ja schon in Zeile 2-4 - daher verstehe ich das Problem nicht wirklich...)

    Das:

    PointerToEntryField = ADR_OFF(E1)
    (*PointerToEntryField).insert(0,"Hallo Freunde")

    ist also im Grunde einfach das:

    Python
    E1.insert(0,"Hallo Freunde")
  • :danke_ATDE:

  • Zitat

    Um während der Laufzeit zu entscheiden in welches Entryfeld geschrieben wird.

    Ist doch ebenfalls einfach:

    Python
    if auswahl == 1:
        entry_field = e1
    elif auswahl == 2:
        entry_field = e2
    else:
        entry_field = e_was_weiss_ich
        
    entry_field.insert(0, "Hallo Freunde")

    Du solltest im Zuge deiner Annäherungen an Python am besten PEP-8 lesen, so ist es z.B. gute Praxis, normale Variablen, Funktionen und Methoden klein_mit_unter_strich zu benennen, Klassen MitCamelCase und "Konstanten" (gibt es in Python ja auch nicht wie in anderen Sprachen) GROSS_MIT_UNTERSTRICH.

    So erkennt man sofort, um was es sich nun handelt, auch bei fremdem Code. E1.foo() wäre somit eine Klassenmethode, ist aber in deinem Fall eine Instanzmethode.

    Dass die Namensgebung in Code in allen Programmiersprachen am besten in Englisch geschehen sollte, brauche ich hoffentlich nicht zu erwähnen.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!