Tabelle mit Entry anstall Label

Fragen zu Tkinter.
Antworten
DMD
User
Beiträge: 123
Registriert: Sonntag 17. Mai 2015, 03:34

hi
ich habe folgenden code, würde aber gern aus dem untersten LABEL ein ENTRY machen, das eben auch die gegebenen werte anzeigen soll.

Code: Alles auswählen

from Tkinter import *

def auswahlUebersicht():

    rootWin4 = Tk()
    rootWin4.title('GUI-VERWALTUNG')
    rootWin4.geometry('+800+200')

    liste = []

    probeListe = []
    monat = '16.09.2015'
    nummer = 0
    name = 'Hubertus Mustermann'
    gebdat = '01.01.2111'
    wohnort = '12345 Zukunft'
    erstePause = 'Hi,'
    zweitePause = 'wie'
    istSum = 8.75
    sollSum = 9
    ueberSum = (istSum - sollSum)
    probeListe.append(monat)
    probeListe.append(istSum)
    probeListe.append(sollSum)
    probeListe.append(ueberSum)
    liste.append(probeListe)

    for row, items in enumerate(liste):
        for column, item in enumerate(items):
            label_0 = Label(rootWin4, text=("' Ausgabeliste '"),font=('Arial', 12, 'bold underline'), height=3, width=20, fg="#000000000", justify='left')
            label_0.grid(row=0, column=0, columnspan=2)
            label_1 = Label(rootWin4, text=(monat), font=('Arial', 12, 'bold underline'), height=1, width=20, fg="#000000000", justify='center')
            label_1.grid(row=1, column=0, columnspan=2)
            label_2 = Label(rootWin4, height=3,width=20, fg="#000000000", justify='center')
            label_2.grid(row=2, column=0)
            label_3 = Label(rootWin4,text=('Kontonummer:'),font=('Arial', 9, 'bold'), height=1,width=20, relief="groove", fg="#000000000", justify='center')
            label_3.grid(row=3, column=0)
            label_4 = Label(rootWin4,text=(nummer),font=('Arial', 9, 'bold'),height=1,width=20, relief="groove",   fg="#000000000", justify='center')
            label_4.grid(row=3, column=1)
            label_5 = Label(rootWin4,text=('Name:'),font=('Arial', 9, 'bold'), height=1,width=20,relief="groove",  fg="#000000000", justify='center')
            label_5.grid(row=4, column=0)
            label_6 = Label(rootWin4,text=(name),font=('Arial', 9, 'bold'),height=1,width=20, relief="groove", fg="#000000000", justify='center')
            label_6.grid(row=4, column=1)
            label_7 = Label(rootWin4,text=('Geburtsdatum:'),font=('Arial', 9, 'bold'), height=1,width=20,relief="groove",  fg="#000000000", justify='center')
            label_7.grid(row=5, column=0)
            label_8 = Label(rootWin4,text=(gebdat),font=('Arial', 9, 'bold'),height=1,width=20, relief="groove", fg="#000000000", justify='center')
            label_8.grid(row=5, column=1)
            label_9 = Label(rootWin4,text=('Wohnort:'),font=('Arial', 9, 'bold'), height=1,width=20,relief="groove",  fg="#000000000", justify='center')
            label_9.grid(row=6, column=0)
            label_10 = Label(rootWin4,text=(wohnort),font=('Arial', 9, 'bold'),height=1,width=20, relief="groove", fg="#000000000", justify='center')
            label_10.grid(row=6, column=1)
            label_11 = Label(rootWin4, height=2,width=20, fg="#000000000", justify='center')
            label_11.grid(row=7, column=0)
            label_12 = Label(rootWin4,text=('Datum'),font=('Arial', 9, 'bold'),height=1,width=20, relief="ridge",  bg="#ddddddddd", fg="#000000000", justify='center')
            label_12.grid(row=8, column=0)
            label_13 = Label(rootWin4,text=('A'),font=('Arial', 9, 'bold'),height=1,width=20, relief="ridge",  bg="#ddddddddd", fg="#000000000", justify='center')
            label_13.grid(row=8, column=1)
            label_14 = Label(rootWin4,text=('B'),font=('Arial', 9, 'bold'),height=1,width=20, relief="ridge",  bg="#ddddddddd", fg="#000000000", justify='center')
            label_14.grid(row=8, column=2)
            label_15 = Label(rootWin4,text=('C'),font=('Arial', 9, 'bold'),height=1,width=20, relief="ridge",  bg="#ddddddddd", fg="#000000000", justify='center')
            label_15.grid(row=8, column=3)

            print item
            #LABEL = Label(rootWin4, text=item, width=20, relief="sunken",  bg='#eeeee0', fg="#000000000", justify='center').grid(column=column, row=row+9)
            ENTRY = Entry(rootWin4, text=item, width=20, relief="sunken",  bg='#eeeee0', fg="#000000000", justify='center').grid(column=column, row=row+9)

    rootWin4.mainloop()

auswahlUebersicht()
damit ich nach der ausgabe dann die werte des untersten ENTRY ändern und geändert weiterverarbeiten kann.
hat jemand ne idee?
BlackJack

@DMD: Eine Idee wozu? Die Ideen die ich habe sind: Sternchen-Import weg. Die ganzen Wiederholungen von Daten in den `Label`-Erzeugungen in ein Wörterbuch herausziehen und das mit der ``**``-Syntax beim Aufruf übergeben. Und dann sollte man vielleicht nicht den Wert `None` an `ENTRY` binden sondern besser das `Entry`-Widget. Die durchnummerierten `label_*` sind auch äusserst unschön. Ebenso wie `rootWin4` — was soll die 4 da? Und die Schreibweise von so einigen Namen und Quelltextformatierung hält sich nicht an den Style Guide for Python Code. Ausserdem sind einige Werte völlig sinnfrei in Klammern gesetzt.
DMD
User
Beiträge: 123
Registriert: Sonntag 17. Mai 2015, 03:34

ich hab das schnell erstellt,
weil ich gern die syntax für das entry hätte,
anstatt text=item wie bei einem label,
würde ich dem entry gern sagen,
dass es die werte für item anzeigen soll.
z.B. anstatt , "text=item" hab ich schon
"textvariable.get(item)" und
text = textvariable.get(item) ausprobiert.
nix funktioniert :(
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

Und jetzt soll Dir jemand die Tk-Dokumentation vorlesen?
DMD
User
Beiträge: 123
Registriert: Sonntag 17. Mai 2015, 03:34

ne, ich habs schon

Code: Alles auswählen

v = StringVar()
v.set(item)
ENTRY = Entry(rootWin4, textvariable = v, width=26, relief="sunken",  bg='#eeeee0', fg="#000000000", justify='center').grid(column=column, row=row+9)
trotzdem danke.
deine einwände arbeite ich jetzt ab :)
DMD
User
Beiträge: 123
Registriert: Sonntag 17. Mai 2015, 03:34

hallo,
ich bräuchte da nocheinmal hilfe.
ich möchte bei meinem probecode gern
mit klick auf aktuasisieren die werte für v auslesen.
leider gelingt es mir nur, den letzten wert für v 4x auszugeben:

Code: Alles auswählen

from Tkinter import *

def auswahlUebersicht():

    rootWin1 = Tk()
    rootWin1.title('GUI-VERWALTUNG')
    rootWin1.geometry('+800+200')

    liste = []
    probeListe = []
    monat = '16.09.2015'
    nummer = 0
    name = 'Hubertus Mustermann'
    gebdat = '01.01.2111'
    wohnort = '12345 Zukunft'
    erstePause = 'Hi,'
    zweitePause = 'wie'
    istSum = 8.75
    sollSum = 9
    ueberSum = (istSum - sollSum)
    probeListe.append(monat)
    probeListe.append(istSum)
    probeListe.append(sollSum)
    probeListe.append(ueberSum)
    liste.append(probeListe)

    for row, items in enumerate(liste):
        for column, item in enumerate(items):
            label_0 = Label(rootWin1, text=("' Ausgabeliste '"),font=('Arial', 12, 'bold underline'), height=3, width=20, fg="#000000000", justify='left')
            label_0.grid(row=0, column=0, columnspan=2)
            label_1 = Label(rootWin1, text=(monat), font=('Arial', 12, 'bold underline'), height=1, width=20, fg="#000000000", justify='center')
            label_1.grid(row=1, column=0, columnspan=2)
            label_2 = Label(rootWin1, height=3,width=20, fg="#000000000", justify='center')
            label_2.grid(row=2, column=0)
            label_3 = Label(rootWin1,text=('Kontonummer:'),font=('Arial', 9, 'bold'), height=1,width=20, relief="groove", fg="#000000000", justify='center')
            label_3.grid(row=3, column=0)
            label_4 = Label(rootWin1,text=(nummer),font=('Arial', 9, 'bold'),height=1,width=20, relief="groove",   fg="#000000000", justify='center')
            label_4.grid(row=3, column=1)
            label_5 = Label(rootWin1,text=('Name:'),font=('Arial', 9, 'bold'), height=1,width=20,relief="groove",  fg="#000000000", justify='center')
            label_5.grid(row=4, column=0)
            label_6 = Label(rootWin1,text=(name),font=('Arial', 9, 'bold'),height=1,width=20, relief="groove", fg="#000000000", justify='center')
            label_6.grid(row=4, column=1)
            label_7 = Label(rootWin1,text=('Geburtsdatum:'),font=('Arial', 9, 'bold'), height=1,width=20,relief="groove",  fg="#000000000", justify='center')
            label_7.grid(row=5, column=0)
            label_8 = Label(rootWin1,text=(gebdat),font=('Arial', 9, 'bold'),height=1,width=20, relief="groove", fg="#000000000", justify='center')
            label_8.grid(row=5, column=1)
            label_9 = Label(rootWin1,text=('Wohnort:'),font=('Arial', 9, 'bold'), height=1,width=20,relief="groove",  fg="#000000000", justify='center')
            label_9.grid(row=6, column=0)
            label_10 = Label(rootWin1,text=(wohnort),font=('Arial', 9, 'bold'),height=1,width=20, relief="groove", fg="#000000000", justify='center')
            label_10.grid(row=6, column=1)
            label_11 = Label(rootWin1, height=2,width=20, fg="#000000000", justify='center')
            label_11.grid(row=7, column=0)
            label_12 = Label(rootWin1,text=('Datum'),font=('Arial', 9, 'bold'),height=1,width=22, relief="ridge",  bg="#ddddddddd", fg="#000000000", justify='center')
            label_12.grid(row=8, column=0)
            label_13 = Label(rootWin1,text=('A'),font=('Arial', 9, 'bold'),height=1,width=22, relief="ridge",  bg="#ddddddddd", fg="#000000000", justify='center')
            label_13.grid(row=8, column=1)
            label_14 = Label(rootWin1,text=('B'),font=('Arial', 9, 'bold'),height=1,width=22, relief="ridge",  bg="#ddddddddd", fg="#000000000", justify='center')
            label_14.grid(row=8, column=2)
            label_15 = Label(rootWin1,text=('C'),font=('Arial', 9, 'bold'),height=1,width=22, relief="ridge",  bg="#ddddddddd", fg="#000000000", justify='center')
            label_15.grid(row=8, column=3)

            v = StringVar()
            v.set(item)
            entry_1 = Entry(rootWin1, textvariable = v, width=22, relief="sunken",  bg='#eeeee0', fg="#000000000", justify='center').grid(column=column, row=row+9)

            label_16=Label(rootWin1, text=('Summe:'), width=22, relief="ridge", font=('Arial', 8, 'bold'), bg='#cdc8b1', fg="#000000000", justify='center').grid(column=0, row=row+10)
            label_17=Label(rootWin1, text=(istSum), width=22, relief="ridge",font=('Arial', 8, 'bold'),  bg='#cdc8b1', fg="#000000000", justify='center').grid(column=1, row=row+10)
            label_18=Label(rootWin1, text=(sollSum), width=22, relief="ridge",font=('Arial', 8, 'bold'),  bg='#cdc8b1', fg="#000000000", justify='center').grid(column=2, row=row+10)
            label_19=Label(rootWin1, text=(ueberSum), width=22, relief="ridge",font=('Arial', 8, 'bold'),  bg='#cdc8b1', fg="#000000000", justify='center').grid(column=3, row=row+10)

            def aktuaLisieren():
                for row, items in enumerate(liste):
                    for column, item in enumerate(items):
                        s = v.get()
                        print s

    b_r4 = Button(rootWin1, text = ' Aktualisieren ', command=aktuaLisieren)
    b_r4.grid(row=4, column=2)

    rootWin1.mainloop()

auswahlUebersicht()
wie bekomm ich alle vier verschiedenen werte für v ausgelesen???
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@DMD: Du mußt Deine v in einer Liste speichern. Dir wurde auch schonmal empfohlen die vielen Labels in einer Schleife zu erzeugen. Das Definieren einer Funktion innerhalb einer Schleife sollte so nicht sein!
DMD
User
Beiträge: 123
Registriert: Sonntag 17. Mai 2015, 03:34

ok, ich bringe es aber am liebsten erst einmal zum laufen, dann mach ich immer die codeverbesserung.
is für mich leichter. wenn alles fertig ist, poste ich das dann nocheinmal.
meine v hatte ich schon in einer liste übernommen, ich möchte aber nicht die am
anfang angezeigten v-strings aus der liste, sondern alle v neu aus dem entry_1 auslesen,
da sie ja auch verändert werden können.
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@DMD: :?: Würde v nicht v heißen, sondern einen ordentlichen Namen haben, wäre die Verwirrung vielleicht nicht ganz so groß. v ist ein StringVar das den aktuellen Inhalt Deines Entries enthält.
DMD
User
Beiträge: 123
Registriert: Sonntag 17. Mai 2015, 03:34

v wird aber ja nur aus der anfänglichen vorgabe (eben aus der liste) in das entry übernommen.
das ist ja auch so wie ich es haben will.
wenn man den code startet, wird das fenster mit den werten aus der liste übernommen und angezeigt.
wenn das geschehen ist, will ich die anfangs geladenen v-werte aber verändern können und dann
komplett neu auslesen. für den anfänglichen v-wert in A (8.75) will ich dann z.B. eine 10 eintragen, und
diesen wert 10 für A neu auslesen.
ich will also die alten werten, die zu anfang aus der liste genommen werden, gar nicht haben,
sondern will das entry komplett neu auslesen, weil ich die aktuell neu eingetragenen werte im entry haben will.
Für C (-0.25) funktioniert es ja, allerdings 4 x :(
DMD
User
Beiträge: 123
Registriert: Sonntag 17. Mai 2015, 03:34

trotzdem danke für eure hilfe :)
Antworten