Seite 1 von 1

Entry Feld "sperren"? - Label löschen?

Verfasst: Donnerstag 10. April 2008, 19:40
von Evil4President
Hallo,

entschuldigt erstmal, dass ich soviele Posts eröffne, aber das sind alles ein paar kleine Feinheiten, die ich so mit meinem Anfangswissen von Python noch nicht alleine lösen kann.
Ich habe mir einen individuellen Bruchrechner programmiert, in dem ich zur Eingabe jeweils 2 Entries übereinander habe. Wenn ich dann auf den Ausrechnen Button klicke, erscheint auch das Ergebnis, jedoch kann man da ja dann im Entry nch die Einträge verändern, sodass man quasi eine falsche Rechnung anzeigen könnte... Zu diesem Zweck würde ich gerne die Entry-Felder blocken, bis man auf den Button zum Neuberechnen klickt. Mit diesem werden dann auch die Entries gelöscht.

Kann man nun gleichzeitig auch mit einem Klick auf diesen Button das Ergebnis, welches ich hinter den Entries als Label ausgebe, löschen? So wie es bisher ist, kommt es bei manchen Zahlen im Ergebnis vor, dass das vorherige Label "durchscheint" da dessen Stellen nicht vollständig überschrieben wurden...

Ich poste hier mal noch den Code:

1) Entry-Felder

Code: Alles auswählen

fenster=Toplevel()
    fenster.title('Bruchrechnung')
    fenster.geometry('650x300')
    titel1=Label(fenster,text=u'Geben Sie nachfolgend die Zähler und Nenner der Brüche an und wählen Sie die gewünschte Rechenoperation!')
    titel1.place(x=10,y=10)
    titel2=Label(fenster,text=u'>>> HINWEIS: Sie müssen erst die Zahlen eingeben und dann den Button zur Auswahl der Operation betätigen! <<<')
    titel2.place(x=10,y=35)
    z1=Entry(fenster,width=8)
    z1.place(x=10,y=70)
    z2=Entry(fenster,width=8)
    z2.place(x=180,y=70)
    s1=Label(fenster,text=6*'_',font=('bold'))
    s1.place(x=7,y=99)
    s2=Label(fenster,text=6*'_',font=('bold'))
    s2.place(x=177,y=99)
    n1=Entry(fenster,width=8)
    n1.place(x=10,y=151)
    n2=Entry(fenster,width=8)
    n2.place(x=180,y=151)
    plus=Button(fenster,text=u' + ',font=('bold',12),command=addition)
    plus.place(x=85,y=85)
    plus.config(bg='grey93')
    minus=Button(fenster,text=u'  -  ',font=('bold',12))
    minus.place(x=125,y=85)
    minus.config(bg='grey93')
    mal=Button(fenster,text=u' x ',font=('bold',13))
    mal.place(x=85,y=125)
    mal.config(bg='grey93')
    durch=Button(fenster,text=u'  :  ',font=('bold',12))
    durch.place(x=125,y=125)
    durch.config(bg='grey93')
    # Button zum Löschen der Entry-Felder und evtl falls möglcih zum Löschen des Labels Ergebnis
    button=Button(fenster,text=u'Neu Berechnen!',command=delete_entry)
    button.place(x=10,y=200)
2) Ausgabe des Bruches

Code: Alles auswählen

ergebnis_pt1=Label(fenster,text=u'=',font=('bold',22))
            ergebnis_pt1.place(x=245,y=100)
            z3,n3=bruch_addieren(int(z1.get()),int(n1.get()),int(z2.get()),int(n2.get()))
            z4=Label(fenster,text=z3)
            z4.place(x=300,y=70)
            s4=Label(fenster,text=8*'_')
            s4.place(x=297,y=99)
            n4=Label(fenster,text=n3)
            n4.place(x=300,y=151)
3) Funktion mit der der Button "Neu Berrechnen belegt ist"

Code: Alles auswählen

def delete_entry():
        z1.delete(0,END)
        z2.delete(0,END)
        n1.delete(0,END)
        n2.delete(0,END)
        plus.config(bg='grey93')
Wäre schön, wenn jemand einen Rat hätte.

MFG evil4president

Verfasst: Freitag 11. April 2008, 13:27
von Evil4President
habe jetzt mal eine Tkinter Referenz gefunden und darin im Entry-widget Teil durchgelesen... da steht, dass man mit der Option "state=DISABLED" bzw. "state=NORMAL" die Entry Felder auf aktiv bzw. inaktiv setzen kann, jedoch muss ich dies quasi als Parameter in der Klammer so setzen, also z.B. z1=Entry(fenster,state=DISABLED)
nur wie kann ich das machen, dass die Entries zuerst auf NORMAL stehen, und dann in einer anderen Funktion auf DISABLED gesetzt werden? Soweit ich mich bisher auskenne geht das doch nur, wenn man eine method anwenden würde, z.B. was wie z1.state... aber das geht nicht, habe ich bereits versucht....

Bitte um Hilfe

Verfasst: Freitag 11. April 2008, 15:28
von numerix
Das Entry-Widget verfügt wie fast alle Widgets über eine Methode config, mit der man so etwas machen kann.

Guckst du hier: http://effbot.org/tkinterbook/entry.htm

Verfasst: Freitag 11. April 2008, 19:08
von Evil4President
JA, stimmt. An die Möglichkeit das über die config einzustellen habe ich nicht gedacht. Bin wie gesagt noch relativ neu in dem Gebiet...
Vielen Dank pütone ;-)

Verfasst: Freitag 11. April 2008, 19:31
von Evil4President
Habe gerade doch noch was festgestellt... Bei den ENtry-Feldern funktioniert alles einwandfrei, jedoch kann ich mit label.config(state=DISABLED) kein Label "ausblenden" bzw. löschen.
Habe auch auf der von dir verlinkten Seite unter "Label Widget" keine config-Option gefunden, außer state mit Hilfe derer man soetwas machen könnte.

Hat vielleicht noch jemand einen Tipp?

Verfasst: Freitag 11. April 2008, 20:52
von numerix
Manchmal hilft es auch, wenn man die Suchfunktion des Forums nutzt:

http://www.python-forum.de/topic-14190.html

Verfasst: Freitag 2. Mai 2008, 15:54
von Himalius
ich hab jetzt selbst noch ne frage:
ich weiß zwar jetzt wie man eingabefelder sperrt, das sie nicht mehr veränderbar sind, aber wie kann ich das machen, dass man das, was drinsteht trotzdem noch kopieren kann, sodass man das woanders benutzen kann.
ich hab nämlich ein chiffrierprogramm und will, dass der user den chiffrierten text einfach rauskopieren kann.
bitte um hilfe.

MfG Himalius

Verfasst: Freitag 2. Mai 2008, 16:54
von numerix
Du musst state statt auf "disabled" auf "readonly" setzen:

Code: Alles auswählen

import Tkinter as tk
root = tk.Tk()
entry = tk.Entry(master=root)
entry.pack()
entry.insert(0,'Hallo')
entry.config(state='readonly')
root.mainloop()
Achtung: Während NORMAL und DISABLED definierte Tkinter-Konstanten sind, gilt das für READONLY nicht. Hier funktioniert nur die Zeichenkettenvariante!

Verfasst: Freitag 2. Mai 2008, 20:20
von Himalius
pütone hat geschrieben: Achtung: Während NORMAL und DISABLED definierte Tkinter-Konstanten sind, gilt das für READONLY nicht. Hier funktioniert nur die Zeichenkettenvariante!
versteh ich nich so ganz.
wie meinst du das.
vor allem das mit der Zeichenkettenvariante versteh ich nich.

Verfasst: Freitag 2. Mai 2008, 22:04
von numerix
Für zahlreiche Werte bringt Tkinter Konstanten mit, etwa zur Positionierung bei Verwendung eines Geometriemanagers oder zur Positionierung innerhalb eines Text- oder Entry-Widgets oder eben zur Zustandsfestlegung mittels state.

Für den Fall, dass Tkinter als tk importiert wurde, sind folgende Aufrufe gleichwertig:

Code: Alles auswählen

entry.config(state=tk.DISABLED)
entry.config(state='disabled') 
Das funktioniert in den meisten Fällen. Bei 'readonly' gibt es aber keine entsprechende Konstante tk.READONLY, so dass nur die Zeichenkettenvariante funktioniert.

Verfasst: Freitag 2. Mai 2008, 22:29
von Himalius
ja dat mit der zeichenkettenvariante versteh ich ja nich.
was meinst du damit?

Verfasst: Freitag 2. Mai 2008, 22:33
von Himalius
funktioniert jetzt.
danke nochmals