Seite 1 von 1

Button eine Funktion zuweisen

Verfasst: Montag 26. Januar 2004, 17:31
von bmh1980
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

Verfasst: Montag 26. Januar 2004, 17:42
von Milan
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

Verfasst: Montag 26. Januar 2004, 18:29
von NOTZE
du bist anfänger in python oder in progrtammieren??

Verfasst: Montag 26. Januar 2004, 18:47
von wuf
Hallo bmh1980

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

Gruss wuf

Verfasst: Montag 26. Januar 2004, 18:47
von bmh1980
: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

Verfasst: Montag 26. Januar 2004, 18:50
von bmh1980
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

Verfasst: Montag 26. Januar 2004, 19:52
von Dookie
Hi bmh1980,

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


Gruß

Dookie

Verfasst: Montag 26. Januar 2004, 20:00
von Milan
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:

Verfasst: Montag 26. Januar 2004, 21:37
von bmh1980
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