Übernahme der Eingabefelder

Fragen zu Tkinter.
Benutzeravatar
spicer
User
Beiträge: 52
Registriert: Freitag 5. März 2021, 23:40
Kontaktdaten:

Hallo Gemeinde
Ich verzweifle fast, obschon ich eigentlich eine Engelsgeduld habe ^^

Ich schreibe eine GUI mit Eingabefeldern, welche voreingestellte Werte drin haben. (Grid)

Wenn ich in ein solches Feld einen neuen Wert eingebe, wird der mir per print in der Konsole angezeigt.
Aber übernommen wird der nicht.

Habe im folgenden Codeblock nur das nötigste eingefügt, der Übersichtkeit halber.

Code: Alles auswählen

def fetch(entries):
   for entry in entries:
      field = entry[0]
      text  = entry[1].get()
      print((field, text))
   return
      
def makeform(fenster, fields, standard):
    entries = []
    row1=1
    row2=1
    columns=len(fields)
    for field in fields:
      if row1<=(columns/2):
        column1=0
        row2=row1
      else:
        column1=3
        row2=row1+1-(int((columns+1)/2)+1)
      row = Frame(fenster)
      lab = Label(row, width=15, text=field, anchor='w')
      ent = tk.Entry(row)
      ent.insert(10, standard[row1-1])
      row.grid(row=row2, column=column1, padx='5', pady='5')
      lab.grid(row=row2, column=column1)
      ent.grid(row=row2, column=column1+1)
      entries.append((field, ent))
      row1=row1+1
    return entries

def default(fields2):
    entries = []
    for field in fields2:
      entries.append((field))
    return entries

def fertig():
    if len(filename)<4:
        return
    fenster.destroy()
    return

fields = 'startTime', 'endTime', 'diffTime', 'delay', 'H/L Schwelle', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'carryout', 'rbo', 'dunkel', 'hell', 'x1', 'x2'
felder = '0.0005', '99999999', '0.001', '200', '2.5', 'V(a)', 'V(b)', 'V(c)', 'V(d)', 'V(e)', 'V(f)', 'V(g)', 'V(carryout)', 'V(rbo)', 'C0C0C0', 'FF4000', '-', '-'
filename = " "

standard = default(felder)

if __name__ == '__main__':
   fenster = Tk()
   fenster.title("Show 7 Segment")
   fenster.geometry('650x500')
   ents = makeform(fenster, fields, standard)
   fenster.bind('<Return>', (lambda event, e=ents: fetch(e)))

   b2 = Button(fenster, text='Fertig', command = fertig)
   b2.grid(column=0, padx='5', pady='5')

   fenster.mainloop()
Die neuen Werte werden nicht in die Variable "standard" (array) übernommen.
Was mache ich falsch?

Falls es praktisch sein sollte, die komplette py Datei im Anhang. Ist natürlich noch nicht fertig. Der letzte Teil läuft noch nicht. Aber ist momentan irelevant ^^
https://www.xup.in/dl,14397439/s7s.py/
Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
(Murphys Gesetz)
Benutzeravatar
spicer
User
Beiträge: 52
Registriert: Freitag 5. März 2021, 23:40
Kontaktdaten:

Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
(Murphys Gesetz)
sbader01
User
Beiträge: 1
Registriert: Sonntag 3. Oktober 2021, 09:04

Die Werte aus den Bedienelementen werden der Variable Standards nicht automatisch wieder zugewiesen.
Im Prinzip musst du sie wie in der Methode fetch(ents) auslesen und die Werte dann zuweisen.
Benutzeravatar
Dennis89
User
Beiträge: 1158
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

ehrlich gesagt ist dein vollständiger Code etwas unübersichtlich.
Anstatt 'os' benutzt man das aktuelle 'pathlib.Path' und '*'-Importe sind nicht gut, denn da holt man sich alle Namen die in tkinter definert sind in seinen Namensraum. Dabei kann es zu Namenskollisionen führen und man weis auch gar nicht wo welcher Name her kommt. Richtig/Besser macht man es so, wie du es eine Zeile darunter gemacht hast. Das heißt 'frim tkinter import *' kannst du löschen und alle 'tkinter'-Namen sprichtst du mit 'tk.<name>' an.
Jetzt wirds meiner Meinung nach chaotisch. Alles ist irgendwie irgendwo definiert. Du solltest dir mal den Aufbau eines Python-Programms anschauen.
Auf Modulebene steht kein ausführbarer Code (Ausnahme 'if __name__ == '__main__':'), hier werden nur Konstanten, Funktionen und Klassen definiert.
Das Programm wird in einer Funktion Namens 'main' gestuert. Daraus werden Funktionen aufgerufen, Argumente übergeben und Rückgaben entgegengenommen.

Wenn du ein etwas komplexeres GUI programmierst, dann benötigst du dafür eine Klasse. Darin und nur darin wird dein GUI aufgebaut/definiert.

Ein sinnfreies Beispiel dazu habe ich dir mal hier:

Code: Alles auswählen

#!/usr/bin/env python3

import tkinter as tk


DEFAULT_NUMBER = 0


class LuckyNumber(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)
        tk.Label(self, text="Glückszahl eingeben: ").grid(
            column=0, row=0
        )
        self.lucky_number = tk.Entry(self)
        self.lucky_number.grid(column=1, row=0)
        self.entry_number = tk.Label(self, text=f"Ihre Glückszahl: {DEFAULT_NUMBER}")
        self.entry_number.grid(column=0, row=5)
        self.set_number = tk.Button(self, text="Glückszahlzahl speicher", command=self.show_lucky_number)
        self.set_number.grid(column=0, row=6)
        self.exit = tk.Button(self, text="Beenden", command=master.destroy)
        self.exit.grid(column=1, row=6)

    def show_lucky_number(self):
        self.entry_number.config(text=f"Ihre Glückszahl: {self.lucky_number.get()}")
        print(self.lucky_number.get())


def main():
    root = tk.Tk()
    root.title("Glückszahl")
    app = LuckyNumber(root)
    app.pack()
    app.mainloop()


if __name__ == "__main__":
    main()
Es macht Sinn, wenn du dir mal das Tutorial durcharbeitest:
https://docs.python.org/3/tutorial/

Grüße
Dennis

P.S. Sorry das ich dir keine konkrete Antwort liefere, aber du solltest das von Anfang an ordentlich aufbauen, achja und wie du siehst 'global' wird nicht benötigt. Das schafft dir nämlich noch mehr Ärger, wenns dumm läuft.
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
spicer
User
Beiträge: 52
Registriert: Freitag 5. März 2021, 23:40
Kontaktdaten:

Danke
Es gibt viele Unklarheiten bei mir, da ich ein "alt"-Programmierer bin. REXX, C64-Basic usw.
Ich finde nirgends ein gutes Tutorial. Vorallem nicht in DE.
Das mit den Klassen konnte mir noch nie jemand erklären.
Und ich selber bin schon genug mit der Syntax und DEF's beschäftigt.
Bin ich denn so alt geworden?
Warum schreibt niemand ein Tutorial, welches auch Alte verstehn?
Mein Forum (Admin & Master): www.ltspiceusers.ch
...also so ganz blöd bin ich nicht ^^
Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
(Murphys Gesetz)
Benutzeravatar
spicer
User
Beiträge: 52
Registriert: Freitag 5. März 2021, 23:40
Kontaktdaten:

"eine Zeile darunter gemacht hast. Das heißt 'frim tkinter import *" ..wo ist die?

Ich vermisse das alte Basic oder eben REXX.
Ich versuche dauernd, jede Routine selber zu schreiben.
Wie auch das dann folgende Array.
Hab nach langem Suchen pandas gefunden.
Das muss man auch erst mal kennen!
Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
(Murphys Gesetz)
Benutzeravatar
__blackjack__
User
Beiträge: 13123
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@spicer: Das Programm ist sehr unübersichtlich. Bevor man da weiter arbeitet, sollte das erst einmal konsistent eingerückt werden (vier Leerzeichen pro Ebene). Sternchen-Importe sollten weg, damit man weiss was woher kommt. ``global`` sollte weg. Da es schon eine Klasse in dem Programm gibt, hat man dafür auch wirklich keine Ausrede mehr. Und diese Vermischung von Hauptprogramm und Funktions- und Klassendefinitionen, mit dem ``if __name__ == …``-Guard *mitten* im Programm, aber auch Code ausserhalb, und nichts vom Hauptprogramm in einer Funktion, also ganz viele globale Variablen, geht gar nicht. Und dann die ganzen kryptischen Abkürzungen — Namen sollen dem Leser vermitteln was der Wert hinter dem Namen bedeutet, und nicht zum Rätselraten zwingen.

`open_file()` operiert auf einer Zeichenkettendarstellung einer Zeichenkette. Warum? Beziehungsweise einfach nur: Nein!

In der Funktion heisst der im Grunde gleiche Wert auch mal `filename` und mal `file_name`‽

Bei einigen Funktionen ohne Rückgabewert steht am Ende ein überflüssiges ``return``.

In `makeform()` sind `row1` und `row2` verwirrend. Das eine scheint für das Layout zu sein, das andere ein Index der wohl eher mit `enumerate()` erzeugt werden sollte. Namen sollte man nicht nummerieren. Und neben den Zahlen `row1` und `row2` dann auch noch einen Frame `row` zu haben, ist ebenfalls verwirrend.

Wenn man über zwei Sequenzen oder allgemein iterierbare Objekte ”parallel” iterieren möchte, sollte man die `zip()`-Funktion verwenden.

Es macht keinen Sinn bei leeren Eingabefeldern etwas ab Index 10 einzufügen. Warum 10? Warum nicht 23 oder 42?

Die `default()`-Funktion ist einfach nur `list()`, dafür braucht man keine neue Funktion definieren.

Man sollte sich für Deutsch *oder* Englisch entscheiden. Es gibt `fields` und es gibt `felder`, beide Worte bedeuten das gleiche, die Werte im Programm aber etwas anderes. Woher soll man als Leser wissen was was bedeutet, wenn die Worte doch das gleiche bedeuten?

Konstantennamen werden per Konvention KOMPLETT_GROSS geschrieben.

Werte aus der Liste werden später teilweise an mehr als einen Namen gebunden, aber nicht alle Namen werden im Programm dann auch verwendet.

`digits` sieht sehr regelmässig aus, also nicht so, als müsste man das manuell tatsächlich so hinschreiben, weil man den Wert an einem gegebenen Index einfach ausrechnen könnte. Das die Länge 11 hart kodiert im Quelltext steht, ist auch ungünstig. An der Stelle würde sich wohl auch `itertools.cycle()` anbieten.

Wenn es für eine Zeichenkette mit ”besonderer Bedeutung” eine Konstante im `tkinter`-Modul gibt, sollte man die benutzen (`tkinter.NORMAL`, `tkinter.HIDDEN`, `tkinter.W`, …).
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
spicer
User
Beiträge: 52
Registriert: Freitag 5. März 2021, 23:40
Kontaktdaten:

Danke
Schreib mir doch meinen Code mal schnell nach den "sauberen" Ansprüchen um.
Bin Anfänger in neuer Hochsprache.
Meine Mankos hab ich oben beschrieben.
Alles mehr oder weniger aus Google zusammen gepflastert.

Es ist nie gut, wenn der vor dem Bildschirm nicht alles begreift.
Darum ist die Situation jetzt auch so.

Die Routine "makeform" hab ich nie ganz begriffen.
So konnte ich nur dran rum basteln.
Zuletzt geändert von spicer am Sonntag 3. Oktober 2021, 10:36, insgesamt 1-mal geändert.
Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
(Murphys Gesetz)
Benutzeravatar
sparrow
User
Beiträge: 4198
Registriert: Freitag 17. April 2009, 10:28

@spicer: Das wird hier hoffentlich keiner für dich tun, denn es ist - wie du selbst sagst - dein Code. Nimm die ausführlichen Hinweise und setz sie um.

Code solltest du hier im Forum zwischen Code-Tags posten. Zumindest ich werde keinen Links folgen, nur um deinen Code zu sehen.
Benutzeravatar
spicer
User
Beiträge: 52
Registriert: Freitag 5. März 2021, 23:40
Kontaktdaten:

Code-Tags benutze ich.
Und versuche mir selber zu helfen, soweit es geht.
Habe lange gezögert, hier zu fragen, weil ich bereits wusste, zusammengeschissen zu werden.

Knapp:
Ich möchte von Euch hier einen Rat.
Nicht mehr, nicht weniger.
Toll, wenn Ihr meinem Code mir überlässt.

PS:
Genau so passiert es, das Foren auf absteigendem Ast sind. Kein Wunder.
Es gibt Tonnen von Foren, in welchen nicht mehr geholfen wird, sondern nur kritisiert. Ob's ums Wissen oder der Grammatik geht ist da Makulatur.

In meinem Forum ist das verboten!
Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
(Murphys Gesetz)
Buchfink
User
Beiträge: 193
Registriert: Samstag 11. September 2021, 10:16

@spicer
Ich finde nirgends ein gutes Tutorial. Vorallem nicht in DE.
bei Udemy gibt's Zeug auf Deutsch. Das ist meines Erachtens auch ganz ok, um einen Einstieg zu finden. Es geht nicht immer in die Tiefe. Wenn man tiefgreifende Infos haben will, dann muss man andere Quellen heranziehen.
Aber das ist eben Thorngates Postulat der angemessen Komplexität. Komplexe Dinge zu erklären, kann nicht zugleich einfach UND kurz UND genau sein.

zu sauberem Code.
Also ich bin auch Python Anfänger und kenne nur "alte" Programmiersprachen. Aber ich meine, dass man in jeder Sprache sauberen Code schreiben kann und dass es nichts mit der Sprache zu tun hat.
Es gibt ein schönes Buch zum Thema "Clean Code" - vielleicht hilft es Dir.

Außerdem
Einen Sixpack bekommt man auch nicht vom Zuschauen ;-)

LG
Benutzeravatar
spicer
User
Beiträge: 52
Registriert: Freitag 5. März 2021, 23:40
Kontaktdaten:

Danke
Learning by doing ist das Besste.
Wäre toll, wenn man fragen dürfte ^^
Vllt sind hier nur Devs. Dann ist klar.
Es gibt keinen schlechteren Erklärer als ein Dev ^^
Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
(Murphys Gesetz)
Sirius3
User
Beiträge: 17761
Registriert: Sonntag 21. Oktober 2012, 17:20

Hier scheißt Dich niemand zusammen. Der Code hat Defizite, was bei einem Anfänger ganz normal ist. Aber wie soll ein Anfänger besser werden, wenn man ihn nicht darauf hinweist.
Die Hilfe wurde Dir hier gegeben: erster Schritt ist, den Code aufzuräumen. Aufgrund des Umfangs des Codes kommt da halt ziemlich viel zusammen.
Der Tipp, alles zu löschen und sauber von vorne zu beginnen, wird meist von den Betroffenen auch nicht mit Begeisterung aufgenommen.
Benutzeravatar
spicer
User
Beiträge: 52
Registriert: Freitag 5. März 2021, 23:40
Kontaktdaten:

Ist so.
Damke

Wo soll ich jetzt suchen/fragen?

Das mit den Klassen & Weiteres hab ich nicht begriffen.
Zudem werd ich das Problem mit dieser Hilfe nicht lösen können.

Gibt's ein anderes Forum, wo nicht nur Python-Götter unterwegs sind?
Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
(Murphys Gesetz)
Benutzeravatar
__blackjack__
User
Beiträge: 13123
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@spicer: Ich kenne auch alte Sprachen, auch aus eigener Erfahrung C64-BASIC und (A)Rexx, und es gibt da eine Lücke nicht nur zu modernen Hochsprachen, sondern auch schon zu Sprachen aus der damaligen Zeit wie Pascal oder C, insbesondere was Verbunddatentypen (RECORD, struct, …) und Parameterübergabe betrifft, was einem bei den alten Microsoft BASIC-Dialekten <= GW-BASIC und Rexx quasi dazu zwingt sehr viel, oder gar alles über globale, und teilweise gezwungen schlecht benannte Variablen (in BASIC), zu lösen.

Von diesen Altlasten muss man sich befreien. Das kann leider kein anderer für einen übernehmen. Gut benannte Variablen und keine globalen Variablen, also sinnvoller Umgang mit Funktionen, ist der erste Schritt. Darauf bauen dann Klassen und Methoden auf. Und Klassen sind Voraussetzung für jede nicht-triviale GUI, weil man dort Zustand über Methodenaufrufe hinweg behalten muss.

Englisch ist auch eine Voraussetzung. Darum kommt man letztendlich nicht herum, egal was man macht, weil die gesamte Dokumentation zur Sprache und den ganzen Bibliotheken auf Englisch ist, und es vielleicht hier und da mal eine Übersetzung gibt, aber nicht für alles, und vor allem nicht dauerhaft aktuell. Da gibt's hier im Forum ein (historisches) Thema zu: „It's english, get over it”.

Was man IMHO mal durchgearbeitet haben sollte, ist das Tutorial in der Python-Dokumentation. Egal was man sonst zum lernen verwendet — das ist von den Leuten, die die Sprache entworfen und implementiert haben, und gibt einen ganz guten Einstieg und Rundgang. Da gibt es im Netz irgendwo auch eine deutsche Übersetzung. Für Python 3.3 glaube ich — da wären wir wieder bei dem Punkt, dass nicht-englischsprachiges schnell veraltet. Es würde also Sinn machen danach noch mal das aktuelle englischsprachige Tutorial durchzugehen und nach Änderungen/Neuerungen Ausschau zu halten.

Code zusammengooglen (oder zusammenstackoverflowen) ist keine gute Idee wenn man nicht auch versteht was der fremde Code im Detail macht. Denn dann kann man die Qualität nicht einschätzen, oder sicherstellen ob der überhaupt immer das tut was er eigentlich tun soll, oder ob da nicht unnötiger Code drin ist, der in dem Kontext in dem er jetzt verwendet wird, gar keinen Sinn (mehr) macht. Und ähnliches gilt wenn Dir jetzt jemand das ganze mal schnell umschreibt. Wobei das gar nicht so schnell geht, vieles davon aber einfach nur Fleissarbeit ist. Ordentlich einrücken, Sternchen-Importe beseitigen, und sinnvolle Namen finden, macht Arbeit, die Du vielleicht besser selbst machen solltest. Auch das zusammensammeln des Hauptprogramms und in eine Funktion stecken, ist so eine Sache. ``global`` beseitigen ist dann der Schritt wo man Klassen für verwenden muss, und wenn das jemand für Dich macht, wird das nicht dazu führen, dass Du auf magische Weise verstehst wie die funktionieren. Das steht dann aber beispielsweise im Python-Tutorial, und es macht wenig Sinn wenn das hier jemand noch mal in einen Beitrag kopiert.

Das Forum ist dann dazu da, falls Du konkrete Fragen zu etwas hast, und Code zeigen kannst, und eine Fehlermeldung. Oder, falls es die nicht gibt, kannst Du beschreiben was Du von dem Code erwartest, und was er stattdessen macht, und warum Du das nicht verstehst. Da kann man dann weiterhelfen.

@Buchfink: Man kann in jeder Sprache sauberen Code schreiben — bezogen auf die jeweilige Sprache. Aber nicht CBM BASIC V2 zum Beispiel in Bezug auf modernere Sprachen. Wenn Namen nur aus maximal zwei (signifikanten) Zeichen bestehen dürfen, und es im Grund nur einen grossen Namensraum gibt, in dem die alle koexistieren, dann kann man da nicht so wirklich viel gegen machen. 😉 (Das mit dem Namensraum stimmt nicht so ganz, weil es Funktionen gibt, die wie Python's ``lambda``-Ausdrücke zwar auf einen einzigen Ausdruck beschränkt sind, aber immerhin einen Namensraum bezüglich des Arguments (ja *eins*!) aufspannen. Solche selbstdefinierten Mini-Funktionen findet man aber auch recht selten in BASIC-Programmen aus der Zeit.)
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
spicer
User
Beiträge: 52
Registriert: Freitag 5. März 2021, 23:40
Kontaktdaten:

"Das Forum ist dann dazu da, falls Du konkrete Fragen zu etwas hast" und weitere Aussagen;
Genau das hab ich doch gemacht als Anfänger nach x Nächten Coden!
Ich will doch jetzt auf dem weiter bauen, obschon es nicht der SAUBERKEIT der Programmier-Götter entspricht.
Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
(Murphys Gesetz)
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

“Ich will doch nur mit meinem Akku-Bohrer im heimischen Bad in meine Schädelplatte bohren, obschon es nicht der SAUBERKEIT der OP-Götter entspricht”

Diese von dir abfällig belegte Sauberkeit ist nun mal kein Selbstzweck. Sondern Voraussetzung für ein ‘sauber’ funktionierendes Programm.

Und wir helfenLeuten, die lernen wollen. Nicht Leuten, die auf ihren Haufen Mist einfach nur eine Kirsche dekoriert haben wollen.
Benutzeravatar
spicer
User
Beiträge: 52
Registriert: Freitag 5. März 2021, 23:40
Kontaktdaten:

Danke für die Hilfe.
Bye

@Moderator:
Da ich weder löschen noch schliessen kann, bitte mach diesen Thread weg.
Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
(Murphys Gesetz)
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Leuten, die schon bei unter 15 Beiträgen zu Beleidigungen und unangebrachten Verallgemeinerungen gebracht haben, weint keiner hinterher. Du hast hier Code und hilfreiche Hinweise erhalten. Wer darauf so anmaßend reagiert, darf sich gerne in seinem eigenen, auf dem absteigenden Ast dümpelnden, Forum so aufführen.
Benutzeravatar
__blackjack__
User
Beiträge: 13123
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@spicer: Okay, die Werte werden nicht ”übernommen” hast Du geschrieben. Da steht ja auch nirgends Code der das machen würde. Da steht Code, der die Werte ausgibt — das passiert ja auch. Die Werte werden nicht auf magische Weise in die Liste übernommen aus der ein Wert, der da vorher mal im Eingabefeld stand, her kam, weil es keine Verbindung dazu gibt, und das so nun mal nicht funktioniert. Das wurde Dir gesagt. Das Problem ist jetzt, das man auch keinen Code schreiben würde, der die Werte nimmt und wieder in eine globale Liste schreibt, weil man keine globale Liste oder halt globale Variablen allgemein verwendet.

Das hat nichts mit ”Programmier-Göttern” zu tun. Der Anfängerstatus entbindet einen nicht davon sinnvoll zu programmieren. Das ist ja nicht irgendwas um Anfänger zu gängeln, oder heraus hängen zu lassen, das man irgendwelche sinnfreien Rituale als Profi kennt, um den Anfängern mal zu zeigen wo ihr Platz ist. Es geht darum saubere, verständliche, wartbare Programme zu schreiben, damit man weniger leicht Fehler macht, Fehler leichter finden kann, und damit andere den Code leichter durchschauen und verstehen können. Und ”andere” sind in der Regel nicht nur tatsächlich andere, sondern auch mal selbst nach einem halben Jahr, wenn nicht mehr alles frisch im Gedächtnis ist, weil man das ja gerade eben geschrieben hat.

Die Antwort ist und bleibt, dass man für so ziemlich jede nicht-triviale GUI objektorientierte Programmierung (OOP) braucht, und dazu mit Klassen vertraut sein muss. Das kann man zusammen mit GUI-Programmierung lernen, dann hat man OOP *und* einen nicht-linearen, ereignisbasierten Programmablauf, oder man schaut sich Klassen erst einmal grundsätzlich an, ohne sich das Thema GUI da gleich mit ans Bein zu binden.

Und dazu kommen dann noch die ganzen Anmerkungen zum Code. Wenn Du die nicht angehst, dann wird irgendwann keiner mehr Lust haben den Code zu lesen. Nicht weil der ”nicht schön” ist, sondern weil es unnötig schwer ist, dem zu folgen und ihn zu verstehen. Es geht bei den Konventionen, sauberem Code und „best practices“ nicht um irgendwelche Schönheitsideale und reine Kosmetik, sondern darum den Code für möglichst viele Leute möglichst leicht verständlich zu machen (inklusive dem Autor selbst), um Fehler leichter zu finden, und auch bestimmte Fehler gar nicht erst zu machen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten