Guten Tag,
ich lerne gerade etwas Python 3 und bin schon zu Beginn etwas
desillusioniert.
Was mir bislang über diese Scriptsprache erzählt wurde klang alles
super.
Als erstes Projekt sollte eine einfache GUI erstellt werden, da dies im
Vergleich zu anderen (Hoch-) sprachen denkbar einfach sein sollte.
Leider hakt es aber noch an allen Ecken und Enden. Hierzu drei kurze
Beispiele.
Obiger Code funktionert in der IDLE-Ide einwandfei. Da ich aber gerade
eine Konsole offen hatte, weil ich noch was in C zu kompilieren hatte,
wollte ich das Script auch einmal über die Shell interpretieren lassen.
Surprise : "NameError: name 'Tk' is not defined"
ixquick (eine Suchmaschine) bemüht und den Hinweis bekommen, dass
Tkinter nicht installiert sein könnte, also noch mal explizit 'apt-get
install python3-tk', ohne Erfolg.
Beispiel 2. Anlegen eines einfachen Fensters, nebst enthaltenen Buttons
zum Beenden des Programmes.
Ergebnis, Fenster und Button werden erstellt, aber nach dem Drücken
besteht das Fenster weiter, Null Reaktion.
Beispiel 3. Ein Fenster in einer ordentlichen Größe ausgeben...
Erstellt wird tatsächlich ein Fenster in der Größe 1 x 2 cm.
Habe ich, bezogen auf die obigen Beispiele, einfach nur etwas übersehen?
Batteries included -hier Tkinter- und drei von drei Beispielen laufen
nicht?!
P.S. sollte eigentlich in die Rubrik 'PROGRAMMIERUNG'..., mea culpa!!!
Wie hast du das Script gestartet?
Hat das Script eine Shebang-Zeile?
Welche Python installation wird aufgerufen, wenn du in der Shell nur den
Pythoninterpreter startest?
Tk ist halt ... naja. Der wesentliche Vorteil ist dass es bei Python
dabeiliegt xD
Ich empfehle für ernsthafte Dinge das Qt-Framework, da gibt es sehr gute
Python Bindings für.
42 schrieb:
>Damit's sowohl unter Python 2 als auch 3 läuft, könnte soetwas helfen:
Das ganze war von vornherein auf Python 3 ausgelegt, sei es vom
Übungsmaterial her, in Form von Büchern, aber auch der eingesetzten
Software, die in der Version Python 3.4.2 vorliegt.
Kaj schrieb:
>Hat das Script eine Shebang-Zeile?
Die Idee hatte ich auch schon und habe es mit, mit einer geänderten und
ohne eine probiert. Das Problem, selbst wenn ich den Python 3
Interpreter in der Shell starte und die Befehle von Hand eingebe, kommt
die gleiche Fehlermeldung. Nur eben nicht in der IDLE-Version, da läuft
es fehlerfrei. (Shell, wie auch IDLE liegen in der Version 3.4.2. vor)
Sven B. schrieb:
>Ich empfehle für ernsthafte Dinge das Qt-Framework, da gibt es sehr gute>Python Bindings für
Die Bücher die ich habe empfahlen halt Tkinter, mit dem Verweis,
Batteries included, Standard unter Python, etabliert und funktioniert
super.
Matthias R. schrieb:> Die Bücher die ich habe empfahlen halt Tkinter, mit dem Verweis,> Batteries included, Standard unter Python, etabliert und funktioniert> super.
Naja Standard für die Leute die die Bücher schreiben vielleicht. In der
Praxis benutzt das kaum eine ernstzunehmende Anwendung. ;p
Ich bin eh kein Fan von Büchern über Programmiersprachen.
Matthias R. schrieb:> ich lerne gerade etwas Python 3 und bin schon zu Beginn etwas> desillusioniert.> ...> Batteries included -hier Tkinter- und drei von drei Beispielen laufen> nicht?!
Matthias R. schrieb:> Die Bücher die ich habe empfahlen halt Tkinter, mit dem Verweis,> Batteries included, Standard unter Python, etabliert und funktioniert> super.
Und warum hast Du nicht zuerst Deine Omi um Rat gefragt, bevor Du Dein
ganzes Taschengeld für den Python-Interpreter ausgegeben hast?
Bei mir funktionieren die Beispiele.
Hast du vielleicht irgendwo versehentlich eine Datei namens tkinter.py
angelegt, so dass Python diese anstelle des Originalmoduls lädt?
Folgendes Progrämmchen gibt die im Modul tkinter definierten Symbole
aus:
1
import tkinter
2
print(dir(tkinter))
Ist "Tk" darin enthalten? Wenn nicht, was wird sonst ausgegeben?
Hallo Matthias und Sven.
Matthias R. schrieb:> Guten Tag,>> ich lerne gerade etwas Python 3 und bin schon zu Beginn etwas> desillusioniert.>> Was mir bislang über diese Scriptsprache erzählt wurde klang alles> super.>
Ist auch so. Sogar Informatiklegastheniker wie ich kommen damit klar.
> Als erstes Projekt sollte eine einfache GUI erstellt werden, da dies im> Vergleich zu anderen (Hoch-) sprachen denkbar einfach sein sollte.>> Leider hakt es aber noch an allen Ecken und Enden. Hierzu drei kurze> Beispiele.
Meist sind das wirklich winzige Aufhänger.
Leider habe ich aktuell keine Zeit, in Deinen Code einzuarbeiten, aber
ich habe mal ein übungsskript zum Austesten der tkinter GUI geschrieben.
Schau mal in den Anhang nach Buttontest2.zip. In dem Ordner findest Du
"Buttontest2.py", das ein Python3 skript ist. "P600-Dioden2.gif" gehört
mit dazu und sollte im gleichen Ordner liegen. Du kannst auch ein
anderes GIF nehmen, aber weil es über den Namen hartverbunden ist,
sollte das schon passen.
> Obiger Code funktionert in der IDLE-Ide einwandfei.
Dann ist der Code auch ok.
> Da ich aber gerade> eine Konsole offen hatte, weil ich noch was in C zu kompilieren hatte,> wollte ich das Script auch einmal über die Shell interpretieren lassen.>> Surprise : "NameError: name 'Tk' is not defined"
Das hört sich danach an, als verstünde der Interpreter das nicht.
könnte sein das mit dem Shebang was nicht funktioniert, es wird der
falsche Interpreter gestartet, oder ein Pfad stimmt nicht.
Um das auszuschliessen, gehe mit der Konsole mal in den Ordner, indem
Dein Skript liegt und gebe beim starten dort den interpreter mit an z.B.
mit dem Kommando "python3 Deinskript.py"
>> Habe ich, bezogen auf die obigen Beispiele, einfach nur etwas übersehen?
Entweder, oder Deine Lehrbücher sind uralt und auf Python2 bezogen, oder
aber es sind schlicht Fehler darin.
Die meisten Lehrbücher gehen aus Motivationsgründen zu schnell vorwärts,
ohne kleinklein zu erklären, damit der Delinquent nicht die Lust
verliert, und übersehen oft Kleinigkeiten oder bleiben unklar.
Und für den Schreibstil wird dann auch noch öfters mit dem Prädikat
"Erfolgsorientiert" geworben. :-/
Vermutlich muss man sich die Lehrbücher, die man wirklich braucht,
selber schreiben.
>> Batteries included -hier Tkinter- und drei von drei Beispielen laufen> nicht?!
Den interaktiven Modus nutze ich meist auch nur, um mal schnell was
auszuprobieren. Für Widgetgeschichten ist er aber eher ungeeignet.
Sowas läuft als Skript einfacher.
Aber hier sind Spezialisten, die Dir dazu mehr sagen können als ich.
> P.S. sollte eigentlich in die Rubrik 'PROGRAMMIERUNG'..., mea culpa!!!
Passiert halt. Vieleicht verschiebt es ja ein Mod.
Hallo Sven.
Sven B. schrieb:> Tk ist halt ... naja. Der wesentliche Vorteil ist dass es bei Python> dabeiliegt xD>> Ich empfehle für ernsthafte Dinge das Qt-Framework, da gibt es sehr gute> Python Bindings für.
Tkinter ist halt bei den meisten Python Distributionen fertig mit
eingepackt. Auch für Windows. Das ist ein Riesenvorteil, wenn es um
Portabilität geht.
Ausserdem finde ich Tkinter relativ einfach im Handling. Verglichen mit
QT.
Natürlich ist es auch spartanischer. Aber genau passend für einfachere
GUIs.
Mit freundlichem Gruß: Bernd Wiebus alias dl1eic
http://www.l02.de
Yalu X. schrieb:
>Ist "Tk" darin enthalten? Wenn nicht, was wird sonst ausgegeben?
Tk ist darin enthalten.
>Bei mir funktionieren die Beispiele.
In der IDLE laufen sie bei mir auch.
Hier wird ein Button erstellt, welcher, nachdem er gedrückt wird, dass
Programm beenden sollte, so mein Verständnis. Und hier passiert gar
nichts, auch nicht in der IDLE-Variante.
Hallo Bernd.
Bernd Wiebus schrieb:
>Dann ist der Code auch ok.
Gehe ich auch von aus.
>...oder Deine Lehrbücher sind uralt und auf Python2 bezogen, oder>aber es sind schlicht Fehler darin.
[2011] Lutz, Marc: Programming Python, 4th Edition
,..nur um mal eines zu nennen. Und Python3 steht explizit vorne auf dem
Cover drauf.
>Meist sind das wirklich winzige Aufhänger.
Glaube ich auch. Hätte ich das mit der Shebang-Zeile nicht schon
ausgeschlossen und auch das Script innerhalb des Verzeichnisses schon
mal über 'python3 SCRIPTNAME.py' gestartet, hätte ich auch in diese
Richtung getippt.
>> Surprise : "NameError: name 'Tk' is not defined">Das hört sich danach an, als verstünde der Interpreter das nicht.
..,oder als würde der Interpreter es nicht kennen. Wie oben geschildert.
Hier hatte jemand eine eher rudimentäre Python-Variante installiert und
konnte erst mit Tkinter arbeiten, nachdem er 'apt-get install
python3-tk'
ausgeführt hatte.
>Vermutlich muss man sich die Lehrbücher, die man wirklich braucht,>selber schreiben.
Jede c-File bekommt immer eine ordentliche Dokumentation und eine
read_me.txt mit zusätzlichen Erläuterungen. Nichts ist nerviger, als
sich Wochen später wieder komplett in eine Sache einarbeiten zu müssen,
nur weil auf Letzteres beim ersten Mal verzichtet wurde.
EDIT: Mein erster Fehler hat sich gerade in Luft aufgelöst, nachdem ich
die beiden alten Python-Versionen (2 und 3) mit 'apt-get PURGE'
runtergeschmissen und dann eine Version von Python3 neuinstalliert habe.
Sven B. schrieb:
>Der wesentliche Vorteil ist dass es bei Python dabeiliegt
Batteries included eben. Fand bzw. finde ich super, wenn standardmässig
solche Sachen mit inbegriffen sind.
Über die Qualität kann man dann immer noch streiten
Bernd Wiebus schrieb:
>Natürlich ist es auch spartanischer. Aber genau passend für einfachere>GUIs.
Genau, einfach ohne viel Schnick Schnack. So bin ich auch erst
dazugekommen. Ich hatte bzw. habe ein in C geschriebenes
Konsolenprogramm für das ich gerne eine GUI hätte, Da ich Python ohnehin
lernen wollte bot es an.
Mal sehen, da sich der erste Fehler erledigt hat, bin ich zuversichtlich
auch die beiden anderen Punkte in den Griff zu bekommen.
Matthias R. schrieb:> Mein erster Fehler hat sich gerade in Luft aufgelöst, nachdem ich> die beiden alten Python-Versionen (2 und 3) mit 'apt-get PURGE'> runtergeschmissen
Schlechte Idee. Python 2 ist nicht aus Spaß unter Linux installiert. Es
gibt (leider) immernoch sehr viele Programme die auf Python 2 basieren,
teilweise weil es die externen Python-Module (ebenfalls leider) nur für
Python 2 gibt.
Ich hoffe das steht in deinem Buch drin:
Python 3 ist nicht abwärtskompatibel zu Python 2. Mit Python 3 wurde die
API mal aufgeräumt, Module heißen anders, liegen woanders, sachen die
doppelt waren wurden entfernt, print braucht jetzt Klammern, except
sieht jetzt anders aus, etc. Und viele Entwickler wehren sich mit Händen
und Füßen gegen eine Portierung der Module nach Python 3, oder haben die
Module ganz fallen gelassen, so dass einige Pakete z.B. seit 2010 kein
Update mehr bekommen haben...
Ich hab mal versucht ein Paket von Python 2 nach 3 zu portieren:
Nach 4 Stunden print und try/except ersetzten hab ich aufgegeben...
Unter Linux solltest du Python 2 nicht einfach deinstallieren! Da hängt
noch zuviel dran!
Kaj schrieb:> Ich hab mal versucht ein Paket von Python 2 nach 3 zu portieren:> Nach 4 Stunden print und try/except ersetzten hab ich aufgegeben...
1
2to3 -w .
> Unter Linux solltest du Python 2 nicht einfach deinstallieren! Da hängt> noch zuviel dran!
Das wird der Paketmanager schon beanstanden wenn es so ist. Es ist aber
auch nicht so.
So weit ich weiß ist bei Linux /bin/python, ein Link auf /bin/python2.x.
Die richtige Lösung wäre gewesen, den Link zu löschen und einen auf
/bin/python3.x zu erstellen, oder noch besser in der Shebang-Zeile den
Pfad /bin/python3.x anzugeben.
123456 schrieb:
>oder noch besser in der Shebang-Zeile den>Pfad /bin/python3.x anzugeben
Hatte ich weiter oben schon erwähnt, dass ich das ebenfalls auf dem
Zettel hatte und es mehrfach in den verschiedensten Varianten
ausprobiert habe. Daran hat es definitiv nicht gelegen.
Kaj schrieb:
>Python 2 ist nicht aus Spaß unter Linux installiert. Es>gibt (leider) immernoch sehr viele Programme die auf Python 2 basieren,
Ich habe die Version 2.7.9 hinterher auch wieder aufgespielt.
>Python 3 ist nicht abwärtskompatibel zu Python 2
Das keine Abwärtskompatibilität besteht stand so ziemlich als erstes in
dem Buchtitel, den ich weiter oben gepostet habe, daran lag es nicht.
Mal eine blöde Frage...Eigentlich abwägig, aber ich habe meine
Desktopumgebung vor ein paar Tagen von Gnome3 auf Mate umgestellt.
Soweit funktioniert auch alles, aber bei Dateizugriffen über das Panel,
wenn ich das Filesystem über 'Orte' öffne, switcht er wieder halb in den
Gnome3 Modus.
Kommt mir gerade deshalb in den Sinn, weil der Fehler bei meinem Python3
Programm auch mal und mal nicht aufzutreten scheint. Ob immer dann, wenn
auch der letztgenannte "Fehler" auftritt habe ich jetzt noch nicht
beobachtet.
>> Ergebnis, Fenster und Button werden erstellt, aber nach dem Drücken> besteht das Fenster weiter, Null Reaktion.
Komisch. Das funktioniert bei mir. Nach dem Knopfdrücken verschwindet
alles.
Matthias R. schrieb:>>Vermutlich muss man sich die Lehrbücher, die man wirklich braucht,>>selber schreiben.>> Jede c-File bekommt immer eine ordentliche Dokumentation und eine> read_me.txt mit zusätzlichen Erläuterungen. Nichts ist nerviger, als> sich Wochen später wieder komplett in eine Sache einarbeiten zu müssen,> nur weil auf Letzteres beim ersten Mal verzichtet wurde.
Das hat Python mit den docstrings auch. Und ein Hilfesystem existiert
auch.
Zu den docstrings:
Eine Docstring zu einer Funktion wird unmittelbar an den Anfang der
Funktion eingeschlossen von drei Anführungszeichen geschrieben.
1
>>> def testfunktionMitDoku():
2
"""Und das ist die Doku"""
3
pass
4
5
>>> testfunktionMitDoku.__doc__
6
'Und das ist die Doku'
7
>>>
Nach dem pass zweimal Return drücken.
testfunktionMitDoku.__doc__ gibt diesen Docstring zur Funktion
testfunktionMitDoku aus.
Zum Hilfesystem:
Gib doch mal in IDLE ein:
1
>>> import sys
2
>>> help(sys)
Das Problem der mitgelieferten Doku ist allerdings das gleiche wie bei
den C-Bibliothekenauch: Sie sind
1) nur so gut, wie sie der Autor gemacht hat, und
2) und sie sind eine gute Erklärung und Gedächnisstütze für den
erfahrenen Programmierer, aber als Anfänger oder Gelegenheits
Programmierer wie ich, bei dem zwischen den Coding-Schüben Monate
liegen, habe ich doch immer Probleme überhaupt zu verstehen worum es
geht, und greife lieber auf Lehrbücher und Nachschlagewerke bzw, meine
eigenen Aufzeichnungen und eigene alte Beispielprogramme zurück.
Aus dem Grunde steht zu den docstrings und zum Hilfesystem in
Lehrbüchern auch nur recht kärglich etwas, aber eine Suchmaschine mit
den passenden Begriffen gefüttert hilft weiter.
Matthias R. schrieb:> Mal eine blöde Frage...Eigentlich abwegig, aber ich habe meine> Desktopumgebung vor ein paar Tagen von Gnome3 auf Mate umgestellt.> Soweit funktioniert auch alles, aber bei Dateizugriffen über das Panel,> wenn ich das Filesystem über 'Orte' öffne, switcht er wieder halb in den> Gnome3 Modus.
Ich hatte Debian 7 mit Gnome und dann auf XFCE umgestellt, bzw. auf
einem anderen Rechner direkt Debian 8 mit XFCE. Das ist bei mir aber
kein Unterschied im Verhalten von Python.
>> Kommt mir gerade deshalb in den Sinn, weil der Fehler bei meinem Python3> Programm auch mal und mal nicht aufzutreten scheint. Ob immer dann, wenn> auch der letztgenannte "Fehler" auftritt habe ich jetzt noch nicht> beobachtet.
Hast Du irgendeine Bibliothek aus irgendeinem Grunde mal im
Projektordner mit enthalten und dann wieder "ganz woanders"?
Mit freundlichem Gruß: Bernd Wiebus alias dl1eic
http://www.l02.de
Norbert schrieb:
>Hast du:>System - Einstellungen - Bevorzugte Anwendungen - System - Dateiverwaltung - Caja>eingestellt?
Ich selbst nicht. Es kann sein, dass dies im Zuge der Umstellung auf die
neue Desktopumgebung erfolgt ist, dass weiss ich aber nicht.
Allerdings bin ich nun wieder aus anderen Gründen bei Gnome-3.14.1
zurück und hier schnurrt Nautilus wie ein Kätzchen!
Bernd schrieb:
>Das Problem der mitgelieferten Doku ist allerdings das gleiche wie bei>den C-Bibliothekenauch: Sie sind>1) nur so gut, wie sie der Autor gemacht hat, und>2) und sie sind eine gute Erklärung und Gedächnisstütze für den>erfahrenen Programmierer, aber als Anfänger oder Gelegenheits>Programmierer wie ich, bei dem zwischen den Coding-Schüben Monate>liegen, habe ich doch immer Probleme überhaupt zu verstehen worum es>geht, und greife lieber auf Lehrbücher und Nachschlagewerke bzw, meine>eigenen Aufzeichnungen und eigene alte Beispielprogramme zurück.
Sehe ich ebenso und kann das für mich auch so unterschreiben, dass trotz
der vielerorts mitgelieferten Dokumentation oder man-pages, Lehrbücher,
aber vor allem auch eigene Aufzeichnungen und Dokumentationen, dass
Mittel der Wahl sind.
Mal eben nachgucken, was ' | less' in der Konsole bewirkt, also schnell
'ḿan less' ... Wenn man damit fertig ist, kann man sich seinen
'less-Schein' beim Professor abholen :)
Um mal beim Thema zu bleiben. Ich denke, die von Python mitgelieferte
tkinter-Dokumenation könnte auch besser sein. Stichwort, Batteries
included, da gehört meiner Meinung auch die Dokumentation rein. Aber die
dortigen Beispiele, wenn es denn welche gibt, sind nicht wirklich
hilfreich, zumindest wenn man in das Thema einsteigen will.
>Hast Du irgendeine Bibliothek aus irgendeinem Grunde mal im>Projektordner mit enthalten und dann wieder "ganz woanders"?
Nein eigentlich nicht. Wie gesagt, bis vor kurzer Zeit hatte ich mit
Python3 nichts am Hut. Für die Anfängerbeispiele musste ich auch nicht
mit den Bibliotheken hantieren, außer die Module einzubinden.
Die Namensräume waren aber korrekt eingebunden, was sich daran zeigte,
dass es mal und mal nicht lief. Bei einem Fehler wäre wohl von Anbeginn
an nichts gelaufen.
Ich bin jetzt wieder zurück auf meiner alten neuen Desktopumgebung und
habe etwas klar Schiff gemacht. Als Nächstes werde ich mal was anderes
ausprobieren, weil mir nicht nur beim Python Interpreter die besagte
Merkwürdigkeit aufgefallen ist, sondern auch bei einem in C
geschriebenen Programm, dass einen auf 'inotify' basierenden
Eventhandlder beinhaltet.
In dessen Ausgabe werden die Events bis in den hohen zweistelligen
Bereich hochgezählt und dann ist Sendepause, bis die laufende Nummer
wieder bei über 1000 anfängt weiterzuzählen und auch dann erst wieder
eine Ausgabe zurückliefert.
Jetzt, auf dem gnome-Desktop zurück, funktionieren 'bislang' aber alle
Python-Scripte ohne Ausnahme, sowohl in der Python-Shell, als auch in
IDLE.
Soweit so gut. Ich werde aber versuchen das aufzuklären, alleine schon
aus dem Grund, nicht erst wieder bei einem Großprojekt daraufzustoßen,
dass da irgendwo der Wurm drin sitzt.
Da der thread 1 Jahr alt ist, denke ich, dass der TO das inzwischen
auch weiß.
Alternativ kann man ein Programm auchbmit 'python program.py' aufrufen
:p