Button eine Funktion zuweisen

Fragen zu Tkinter.
bmh1980
gelöscht
Beiträge: 60
Registriert: Montag 26. Januar 2004, 17:13
Kontaktdaten:

Button eine Funktion zuweisen

Beitragvon bmh1980 » Montag 26. Januar 2004, 17:31

Hallo.

Ich versuche mich gerade in Python einzuarbeiten. Dazu habe ich mir ein Buch gekauft, mit dem ich versuche mich vorzuarbeiten.

Leider sind die Beispiele und Erklärungen für einen Anfänger nicht unbedingt sehr verständlich.

Mein erstes Skript für die Konsole funktioniert soweit schon. Nur mit einem GUI (Tkinter) hapert es jetzt.

Ich habe ein Fenster mit mehreren Labels, dazugehörigen Entrys und einem Button. Sobald man auf den Button klickt, soll der Text aus den Entrys in eine Datei geschrieben werden. Leider tut sich beim Klick nichts. Nicht einmal eine Fehlermeldung.

Hoffe, ihr könnte mir einen Ansatz geben, was in meinem Code falsch ist.

Code: Alles auswählen

from Tkinter import *
import os

class Klassenname:
    def __init__(self):
   self.fenster = Tk()
   self.fenster.title('Fenstertitel')
   self.label1 = Label(master=self.fenster, bg='white', text='Programmname', font=('ESSTIXThirteen', 75, 'bold'), relief=RIDGE)
   self.label1.grid(column=0, row=0, columnspan=2)
   self.labelName = Label(master=self.fenster, text='Name:', font=('Bitstream Vera Sans', 20))
   self.labelName.grid(column=0, row=1, sticky=W)
   self.entryName = Entry(master=self.fenster, bg='white', font=('Arial', 20))
   self.entryName.grid(column=1, row=1, sticky=W)
#       [... oberer Text wiederholt sich mit unterschiedlichen Namen ....]
   self.buttonWeiter = Button(master=self.fenster, bg='grey', text='Weiter', padx=200, command='self.schreiben', font=('Bitstream Charter', 36))
   self.buttonWeiter.grid(column=0, row=15, columnspan=2)
   self.fenster.mainloop()

    def schreiben(self):
   name = entryName.get()
#      [... Wieder Wiederholungen ...]
   datei = '/pfad/zur/datei/'+name+'.txt'
   nameX = 'Name: '+name+'\n'
#      [... Wiederholungen ...]
   datei = file(datei, 'w')
   datei.write(namex)
   datei.close()
   datei2 = file(datei, 'a')
#      [... Wiederholungen ...]
   datei2.close

klassenname=Klassenname()


Ich hoffe, dass der Code einigermaßen so aussieht, wie er sollte. Denn ich habe schon so oft daran rumgebastelt, und keinen Erfolg gehabt. :cry:

Wenn das Einrücken etwas verquer aussieht: Im Original-Code ist es richtig. Hier wird es in der Vorschau nämlich schon falsch angezeigt. Ist aber richtig eingegeben.

Marcus
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Beitragvon Milan » Montag 26. Januar 2004, 17:42

Hi. Schreib statt command='self.schreiben' lieber command=self.schreiben (ohne Anführungszeichen). Ein String kann schließlich nicht ausgeführt werden :wink:. Dann muss bei datei.write(namex) das x groß sein und ich frage mich geradem warum die die Datei mehrmals öffnest... Du kannst auch mit der geöffneten weiterarbeiten, bis du sie schließt...

Milan
Benutzeravatar
NOTZE
User
Beiträge: 106
Registriert: Mittwoch 21. Januar 2004, 20:28

Beitragvon NOTZE » Montag 26. Januar 2004, 18:29

du bist anfänger in python oder in progrtammieren??
Benutzeravatar
wuf
User
Beiträge: 1369
Registriert: Sonntag 8. Juni 2003, 09:50

Beitragvon wuf » Montag 26. Januar 2004, 18:47

Hallo bmh1980

Die erste Anweisung in der Funktion
def Schreiben(self)
muss
name = self.entryName.get()
heissen.

Gruss wuf
bmh1980
gelöscht
Beiträge: 60
Registriert: Montag 26. Januar 2004, 17:13
Kontaktdaten:

Beitragvon bmh1980 » Montag 26. Januar 2004, 18:47

:roll:

Danke, dass waren die Anstöße, die ich gebraucht habe.

command='self.schreiben' sollte auch ohne ' sein. Und das x in dateix sollte auch klein sein. Dumme Flüchtigkeitsfehler. :(

Die Datei wird zwei Mal geöffnet, weil sie beim ersten Mal gelöscht werden soll, wenn sie schon vorhanden ist, und beim Zweiten soll immer angehängt werden. Ursprünglich hatte ich es nur zum Schreiben geöffnet. Da wurde der Text jedesmal ersetzt.

du bist anfänger in python oder in progrtammieren??


Ja, in beider hinsicht. Auch wenn ich schon mal etwas mit Delphi von Borland experimentiert habe. Warum? Sieht der Code soo schlimm aus, oder ist er großer Mist?

Marcus
bmh1980
gelöscht
Beiträge: 60
Registriert: Montag 26. Januar 2004, 17:13
Kontaktdaten:

Beitragvon bmh1980 » Montag 26. Januar 2004, 18:50

wuf hat geschrieben:Hallo bmh1980

Die erste Anweisung in der Funktion
def Schreiben(self)
muss
name = self.entryName.get()
heissen.

Gruss wuf


Stimmt, das self. habe ich bei jedem Eintrag vergessen. :( Ich schätze mal, das kommt davon, wenn man ein Skript mehrmals in der Mittagspause überarbeitet. Irendwann sieht man den Wald vor lauter Bäumen nicht mehr.

Werde in Zukunft den Code noch gründlicher durchschauen, bevor ich schreie.

Marcus
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Montag 26. Januar 2004, 19:52

Hi bmh1980,

öffne die Datei doch mit dem Modus "a" wie append/anhängen.


Gruß

Dookie
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Beitragvon Milan » Montag 26. Januar 2004, 20:00

Dookie hat geschrieben:Hi bmh1980,

öffne die Datei doch mit dem Modus "a" wie append/anhängen.


Gruß

Dookie


Hi. Das tut er ja bereits, aber wenn die Datei vorher zwecks löschen mit 'w' geöffnet wurde und noch etwas hinzugefügt werden soll, geht das ja effizienter mit

Code: Alles auswählen

f=file('dateiname.txt','w')
f.write('Zeile1'+'\n')
f.write('Zeile2'+'\n')
...
f.close()

Das war ja auch das, worüber ich ich gewundert hatte. Aber keine Angst, das lernst du auch noch alles :wink:
bmh1980
gelöscht
Beiträge: 60
Registriert: Montag 26. Januar 2004, 17:13
Kontaktdaten:

Beitragvon bmh1980 » Montag 26. Januar 2004, 21:37

Stimmt. Habe die Anweisung mit 'a' mal auskommentiert. Jetzt wird auch alles in die Datei geschrieben.

Ich vermute mal, dass in meinem ersten Skript wohl auch noch ein Wurm drinn ist. Auch wenn es funktioniert.

Aber es wird langsam, danke. :wink:

Marcus

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder