Liebe Pythonprogrammierern,
ich beschäftige mich erst seit wenigen Monaten mit Python, aber erst seit Wochen mit Tkinter. Mir wurde diese Sprache und das Modul empfohlen, um ein benutzerdefiniertes Programm mit grafischer Oberfläche zu gestalten. Allerdings gibt die Suchmaschine des Forums und auch das Internet recht wenig her, um mit Tkinter mehr erstellen zu können, als Labels, Buttons etc. Daher würde ich gerne wissen, wie ich am Besten Tkinter erlernen kann? Wichtig ist mir erstmal nur Tkinter, da die Grundvoraussetzungen von Python für mein Programm bereits vorhanden sind.
Ich wäre sehr dankbar, wenn ihr mir weiterhelfen könntet!
Allgemeine Fragen zu Tkinter
Ich werde heute, obwohl mein Englisch nicht das beste ist, die geposteten Links noch durcharbeiten und Fragen, auf die ich keine Antwort finde, stellen.
um genauer nachzuschlage nehme ich
http://www.amazon.com/exec/obidos/tg/de ... 7?v=glance
und sonst
Objektorientierte Programmierung mit Python
http://www.amazon.com/exec/obidos/tg/de ... 7?v=glance
und sonst
Objektorientierte Programmierung mit Python
Bisher verlief das Schreiben meines Programmes recht gut und da es jetzt fast fertig ist, habe ich nur drei Fragen:
1. Wie kann ich eine Setup-Datei erstellen, die mir das Programm ordnungsgemäß auf dem PC installiert?
2. Ich muss in meinem Programm mehrere .txt Dateien 'verdecken', sozusagen nur für das Programm (ein)lesbar und sichtbar machen. Der Nutzer darf diese Dateien also nicht öffnen können.
3. Habe ich hier schon einmal etwas über selbsterstellte Iconsbilder gelesen, finde aber nicht näheres darüber. Das:
root = Tk()
root.title('Eigener Titel')
root.iconbitmap('C:\Python22\Tools\idle\Icons\tk.gif')
funktioniert leider nicht!
Auch wenn ich das Bild, das ich verwenden will, vorher definiere klappt es nicht.
Ich hoffe ihr könnt mir zumindest in ein paar Fragen behilflich sein.
Gruß Tkinter-Einsteiger
1. Wie kann ich eine Setup-Datei erstellen, die mir das Programm ordnungsgemäß auf dem PC installiert?
2. Ich muss in meinem Programm mehrere .txt Dateien 'verdecken', sozusagen nur für das Programm (ein)lesbar und sichtbar machen. Der Nutzer darf diese Dateien also nicht öffnen können.
3. Habe ich hier schon einmal etwas über selbsterstellte Iconsbilder gelesen, finde aber nicht näheres darüber. Das:
root = Tk()
root.title('Eigener Titel')
root.iconbitmap('C:\Python22\Tools\idle\Icons\tk.gif')
funktioniert leider nicht!
Auch wenn ich das Bild, das ich verwenden will, vorher definiere klappt es nicht.
Ich hoffe ihr könnt mir zumindest in ein paar Fragen behilflich sein.
Gruß Tkinter-Einsteiger
hallo.
ich denke das funktioniert:
verwende anstatt
ich denke das funktioniert:
Code: Alles auswählen
root = Tk()
root.title('Eigener Titel')
root.iconbitmap('pfad/datei.gif')
Code: Alles auswählen
/
Code: Alles auswählen
\
Und fehlt da nicht noch ein "root.mainloop()" ?
Link der alles abdeckt :
http://www.pythonware.com/library/tkinter/introduction/
Link der alles abdeckt :
http://www.pythonware.com/library/tkinter/introduction/
Möge die Python-Community gedeihen
Also einen mainloop hätte ich noch nie gebraucht, aber mal schauen...
Danke Olf, aber das habe ich schon probiert hat vorhin so nicht funktioniert, werde es aber weiterhin versuchen.
Danke Olf, aber das habe ich schon probiert hat vorhin so nicht funktioniert, werde es aber weiterhin versuchen.
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
solange du unter idle arbeitest, gehts auch ohne mainloop(), wenn das Script auch ohne idle laufen sollte, so immer mit mainloop().
statt / oder \ besser die pfade mit os.path.join zusammenfügen.
Gruß
Dookie
statt / oder \ besser die pfade mit os.path.join zusammenfügen.
Gruß
Dookie
Wie sieht es mit Frage 2 und 3 aus?
1. Wie kann ich eine Setup-Datei erstellen, die mir das Programm ordnungsgemäß auf dem PC installiert?
2. Ich muss in meinem Programm mehrere .txt Dateien 'verdecken', sozusagen nur für das Programm (ein)lesbar und sichtbar machen. Der Nutzer darf diese Dateien also nicht öffnen können.
1. Wie kann ich eine Setup-Datei erstellen, die mir das Programm ordnungsgemäß auf dem PC installiert?
2. Ich muss in meinem Programm mehrere .txt Dateien 'verdecken', sozusagen nur für das Programm (ein)lesbar und sichtbar machen. Der Nutzer darf diese Dateien also nicht öffnen können.
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Zu beiden Fragen:
Da kommt es sehr auf das OS an.
Zu 1. Würde ich ein Pythonscript schreiben, welches das Verzeichnis für das Programm anlegt und alle Teile dort hinkopiert, wohin sie gehören. In dem Script kannst Du auch prüfen, ob gewisse Voraussetzungen erfüllt sind und im Falle des Falles den Anwender auf fehlende Programme oder Module hinweisen. Bei umfangreichen Programmpaketen kannst Du auch distutils nehmen.
Zu 2. Unter Linux werden Dateien versteckt, indem der Dateiname mit einem "." beginnt. Um die Dateien nur von deinem Programm lesen zu können, müsste das Programm mit einem eigenen Benutzeraccount laufen und dann die Dateien nur für diesen Nutzer lesbar gemacht werden. Das kann dann von dem Script eingerichtet werden. Im Grunde sollte es aber reichen, die Dateien mit "chmod 0444 dateiname" als nurlesbar zu kennzeichnen und im Bedarfsfall aus dem Programm die Datei vorübergehend mit [/b]os.chmod("dateiname",0666)[/b] schreibbar und anschliessend mit [/b]os.chmod("dateiname",0444)[/b] wieder nur lesbar zu machen.
Das Ganze hat aber mehr mit dem OS als mit Python zu tun.
Gruß
Dookie
Da kommt es sehr auf das OS an.
Zu 1. Würde ich ein Pythonscript schreiben, welches das Verzeichnis für das Programm anlegt und alle Teile dort hinkopiert, wohin sie gehören. In dem Script kannst Du auch prüfen, ob gewisse Voraussetzungen erfüllt sind und im Falle des Falles den Anwender auf fehlende Programme oder Module hinweisen. Bei umfangreichen Programmpaketen kannst Du auch distutils nehmen.
Zu 2. Unter Linux werden Dateien versteckt, indem der Dateiname mit einem "." beginnt. Um die Dateien nur von deinem Programm lesen zu können, müsste das Programm mit einem eigenen Benutzeraccount laufen und dann die Dateien nur für diesen Nutzer lesbar gemacht werden. Das kann dann von dem Script eingerichtet werden. Im Grunde sollte es aber reichen, die Dateien mit "chmod 0444 dateiname" als nurlesbar zu kennzeichnen und im Bedarfsfall aus dem Programm die Datei vorübergehend mit [/b]os.chmod("dateiname",0666)[/b] schreibbar und anschliessend mit [/b]os.chmod("dateiname",0444)[/b] wieder nur lesbar zu machen.
Das Ganze hat aber mehr mit dem OS als mit Python zu tun.
Gruß
Dookie
wenn du unter windoof eine setup datei erstellen willst, dann kannst Du das auch mit einer .bat Datei lösen.
wenn du das nciht willst, kannst du dir einen installer runteladen, bakannt sind
Nullsoft, Miscrosoft, und InstallShield (oder so)
wenn du das nciht willst, kannst du dir einen installer runteladen, bakannt sind
Nullsoft, Miscrosoft, und InstallShield (oder so)
Das mit der Setupdatei sollte kein Problem sein.
Ich habe aber dennoch eine Frage: Ich möchte ein Programm schreiben, mit dem man Wörter in einer Textdatei abspeichert. Soweit alles in Ordnung, nur müsste ich die Datei ständig erweitern lassen und somit 'append' verwenden. Auch kein Problem, nur ich brauche ein bestimmtes Wort am ENDE nach jeder Eingabe! Wenn ich einfach nur anhängen lasse befindet sich das Wort also nicht mehr an letzter Stelle und die Datei ist sinnlos.
Ich habe mir überlegt erstmal den Text, der sich bereits in der Datei befindet so: text = in_file.read() herauszufiltern und diesen zu speichern.
Dann könnte ich diesen Text ohne Probleme wieder anhängen.
Nur leider wird, wenn ich den text anschließend während des Speicherns anhängen will, der aktuelle text, sprich das, was ich geschrieben habe, angehängt und nicht der, den ich am Anfang herausgefiltert hätte.
Falls noch etwas unklar ist, gehe ich gerne näher darauf ein.
Würde mich freuen, wenn ihr einen Lösungsvorschlag hättet!
Ich habe aber dennoch eine Frage: Ich möchte ein Programm schreiben, mit dem man Wörter in einer Textdatei abspeichert. Soweit alles in Ordnung, nur müsste ich die Datei ständig erweitern lassen und somit 'append' verwenden. Auch kein Problem, nur ich brauche ein bestimmtes Wort am ENDE nach jeder Eingabe! Wenn ich einfach nur anhängen lasse befindet sich das Wort also nicht mehr an letzter Stelle und die Datei ist sinnlos.
Ich habe mir überlegt erstmal den Text, der sich bereits in der Datei befindet so: text = in_file.read() herauszufiltern und diesen zu speichern.
Dann könnte ich diesen Text ohne Probleme wieder anhängen.
Nur leider wird, wenn ich den text anschließend während des Speicherns anhängen will, der aktuelle text, sprich das, was ich geschrieben habe, angehängt und nicht der, den ich am Anfang herausgefiltert hätte.
Falls noch etwas unklar ist, gehe ich gerne näher darauf ein.
Würde mich freuen, wenn ihr einen Lösungsvorschlag hättet!
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi,
ich hoffe ich habe dich richtig verstanden:
Gruß
Dookie
ich hoffe ich habe dich richtig verstanden:
Code: Alles auswählen
ende_txt = "ENDE"
try:
f = file("datei.txt","r")
old_text = f.read().rstrip() #alter Text ohne Whitespaces am Ende
f.close()
old_text = old_text[:-length(ende_txt)] # alter Text ohne "ENDE" am Ende
except IOError:
old_text = ""
new_text = input("Text eingeben")
f = file("datei.txt","w")
f.write(old_text) # alter Text
f.write(new_text) # neuer Text
f.write(ende_text) # Ende vom Text
f.close
Dookie
Hi,
ich habe es bisher so versucht:
Wundert euch bitte nicht über die vielen Fehler, hauptsache es funktioniert 
So hatte ich mir das eigentlich vorgestellt, aber wie gesagt, geht der herausgefilterte Text verloren.
PS: Datei stark bearbeitet, nur diese Stelle ich wichtig, ansonsten funktioniert es.
ich habe es bisher so versucht:
Code: Alles auswählen
def load():
global text
datei = "datei.txt"
in_file = open(datei,"r")
text = in_file.read()
wort = a # Eingabe, die in den Text eingefügt werden soll
in_file.close()
schreiben(wort)
def schreiben(wort):
in_file = open(datei,"w")
in_file.write(wort)
in_file.close()
def speichertbla():
global speichert
speichert(text)
def speichert(text):
in_file = open(datei,"a")
in_file.write(text) # Hier ist das Problem. Der Text, der zu diesem #Zeitpunkt existiert wird angehängt, nicht 'text'!
in_file.close()

So hatte ich mir das eigentlich vorgestellt, aber wie gesagt, geht der herausgefilterte Text verloren.

PS: Datei stark bearbeitet, nur diese Stelle ich wichtig, ansonsten funktioniert es.
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Also ich verstehe jetzt überhaupt nichts mehr, wie soll sich da der Pythoninterpreter noch auskennen.
Vermeide erstmal gloable Variablen, besonders wenn Du dann noch Funktionsparameter hast die den gleichen Namen haben.
Wenn Du jetzt noch genau sagen oder an einem Beispiel zeigen kannst, was am ende in der Datei stehen soll, kann man dir sicher besser helfen.
Gruß
Dookie
Vermeide erstmal gloable Variablen, besonders wenn Du dann noch Funktionsparameter hast die den gleichen Namen haben.
Wenn Du jetzt noch genau sagen oder an einem Beispiel zeigen kannst, was am ende in der Datei stehen soll, kann man dir sicher besser helfen.
Gruß
Dookie
Die Fehler werden schon noch beseitigt.
Es ging leider nur mit global.
Also am Ende der Datei soll EOF stehen und zuvor der Text, der schon vor der Veränderung in der Datei vorhanden war.
Angenommen in der Datei steht:
a = b
EOF
Ich will das jetzt erweitern mit c = d. Die Datei muss also nach Verwendung des Programmes:
c = d
a = b
EOF
heißen.
Der Text der Datei soll also nicht verlorengehen, sondern einfach nur angehängt werden.
Es ging leider nur mit global.
Also am Ende der Datei soll EOF stehen und zuvor der Text, der schon vor der Veränderung in der Datei vorhanden war.
Angenommen in der Datei steht:
a = b
EOF
Ich will das jetzt erweitern mit c = d. Die Datei muss also nach Verwendung des Programmes:
c = d
a = b
EOF
heißen.
Der Text der Datei soll also nicht verlorengehen, sondern einfach nur angehängt werden.
Natürlich geht das auch ohne globale Variablen. Dookie hat doch schon ein gutes Beispiel gezeigt, wie man Deine Fragestellung lösen kann. Die Aufteilung in mehrere Funktionen halte ich für übertrieben. Allein schon dadurch würde die globale Variable vermieden.
Grundsätzlich reicht es die Datei einmal einzulesen und einmal rauszuschreiben. Ein zusätzlichen öffnen zum anhängen ist überflüssig. Generell würde ich sowas immer so lösen, die Datei einzulesen, die nötigen Änderungen in der Variable zu machen und diese Varibale wieder in eine Datei schreiben.
Wozu brauchst Du überhaupt EOF? Das die Datei am Ende zu Ende ist, ist doch klar, oder?
Grundsätzlich reicht es die Datei einmal einzulesen und einmal rauszuschreiben. Ein zusätzlichen öffnen zum anhängen ist überflüssig. Generell würde ich sowas immer so lösen, die Datei einzulesen, die nötigen Änderungen in der Variable zu machen und diese Varibale wieder in eine Datei schreiben.
Wozu brauchst Du überhaupt EOF? Das die Datei am Ende zu Ende ist, ist doch klar, oder?

Ok, das Problem habe ich jetzt gelöst.
Ich hatten einen Fehler, den ich nicht bemerkt habe.
Danke für die Mühe.
Jetzt hätte ich aber noch eine Frage:
Wieso wird das Fenster mit:
root = Tk()
root.deiconify()
nicht maximiert?
Ich hatten einen Fehler, den ich nicht bemerkt habe.
Danke für die Mühe.
Jetzt hätte ich aber noch eine Frage:
Wieso wird das Fenster mit:
root = Tk()
root.deiconify()
nicht maximiert?