Workshop: Gui Entwicklung in tkinter

Fragen zu Tkinter.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

stefanxfg hat geschrieben:Ich weiß nicht wo ich die Kodierung einstelle. Das müsste ja am Rechner selbst geschehen oder über den GUI-Designer erfolgen, wenn man die Dateien exportiert.
Ansonsten habe ich mir die entsprechenden Dateien im Notepad++ geöffnet und die Kodierung auf UTF-8 umgestellt. Dann wurden einige "ä" umgewandelt. Diese habe ich dann wieder zu "a" per Hand geschrieben und es funktionert.
Also, wenn man unter Python3 speichert, dann wird das automatisch als utf-8 gespeichert.

Wichtig ist, dass man bei seinem Editor auch die Codierung entsprechend setzt. Ich benutze IDLE und habe keine Kodierung eingestellt. Man kann außer 'None' aber auch utf-8 oder local-defines einstellen. Wenn ich eine Quelldatei neu beginne ohne Generierung und habe Umlaute drin, fragt IDLE beim Abspeichern, ob ich das so lassen will, oder IDLE editieren soll. Gebe ich editieren an, scheibt IDLE automatisch den UTF-8 Kommentar hinein.

Also mit IDLE sollte es eigentlich prima funktionieren, zudem weil ich jetzt auch den UTF-8 Kommentar mit generiere.
Auißerdem ist IDLE bestens auf python Source Code abgestimmt.

Noch besser geeignet ist Geany. Das zeigt Dir sogar Variablen, Klassen, importe usw. in einer Treeview an.

Da wäre Geany: https://www.geany.org/Main/HomePage

Ich glaube, ich steige um auf Geany. Da brauche ich nicht lange im Source Code nach meinen Kassen zu suchen, sondern klicke einfach darauf in der Treeview.
stefanxfg
User
Beiträge: 85
Registriert: Sonntag 2. April 2017, 14:11

"UTF-8 ohne BOM" ist bei mir als Standard eingestellt. Die Konvertierung dazu ist ein Befehl und keine Einstellung. Das würde nur Dateien betreffen, welche ich selbst mit Notepad++ erzeugt habe. Aber ich erzeuge sie mit dem GUIDesigner.

Ich habe nochmal etwas exportiert. Nun zeigt mir Notepad++ an, dass als Kodierung "ANSI" eingestellt ist.
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

stefanxfg hat geschrieben:Die Konvertierung dazu ist ein Befehl und keine Einstellung.
Ja, ist ein Befehl, hatte mich unkorrekt ausgedrückt. Bei mir ist die Grundeinstellung noch bei ISO, weil der sonst meine älteren Webseiten nicht richtig öffnen würde und ich die immer erst bei einer geplanten Überarbeitung ändere.
ANSI ist eigentlich auch nicht verkehrt, wenn Du aber unbedingt UTF-8 möchtest, dann schreib in einem Kommentar etwas mit einem Umlaut, speichere mit UTF-8 und der wird dann auch bei UTF-8 bleiben.
stefanxfg
User
Beiträge: 85
Registriert: Sonntag 2. April 2017, 14:11

Das mag ja sein. Aber ich benötige die Lösung auch für den GUIDesigner, da ich ihn durchaus benutzen möchte und aber bisher die Dateien auf ANSI-Format exportiert werden. Das liegt nicht an Notepad++. Das Format muss irgendwo anders enzustellen gehen.

@Alfons
Nach deinen Worten ist dir bisher die KOdierung im IDLE nicht so wichtig. Möglicherweise wird deswegen ein anderes Format bei mir erzeugt. Vielleicht musst du das bei dir explizit setzen, so dass dann auch eine Datei im UTF-8 Format rausgeschrieben wird, und zwar unabhängig vom System den der USer benutzt.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

stefanxfg hat geschrieben:"UTF-8 ohne BOM" ist bei mir als Standard eingestellt. Die Konvertierung dazu ist ein Befehl und keine Einstellung. Das würde nur Dateien betreffen, welche ich selbst mit Notepad++ erzeugt habe. Aber ich erzeuge sie mit dem GUIDesigner.

Ich habe nochmal etwas exportiert. Nun zeigt mir Notepad++ an, dass als Kodierung "ANSI" eingestellt ist.
Solange keine deutschen Umlaute enthalten sind, vieleicht ist es dann so bei Notepad++.

Aber Geany erkennt, was es ist und zeigt bei einer von mir generierten Datei UTF-8 ohne BOM an und speichert sie dann auch wieder in diesem Format. Da braucht man also nichts einstellen.

Bei IDLE habe ich keinen Menüpunkt Dateieigenschaften gefunden aber speichert auch richtig ab und encodiert richtig, weil es die Kommentarzeile interpretiert.

Wenn deutsche Umlaute vorkommen und keine solche Kommentarzeile, macht IDLE das:

Bild

Macht darauf aufmerksam, dass diese Kommentarzeile fehlt, bietet an, selber UTF-8 einzufügen oder nichts dergleichen, dann speichert es UTF-8 ohne solche Kommentarzeile ab. Für python3 braucht man sie auch nicht.

Übrigens, IDLE ist doch gut, da gibt es im Menü auch einen Klassenbrowser. Arbeite schon lange damit. Habe mir aber das Menü noch gar nicht so angeschaut, sondern nur File speichern und Bearbeiten, wie suchen, suchen ersetzen, alles markieren.

Ich würde IDLE nehmen, das ist gut überschaubar und ist der Standard Editor für Python. Normalerweise ist er auch bei python binary packages mit dabei.
BlackJack

@stefanxfg: Wenn die Dateien aus dem GUI-Designer kommen, dann muss der dafür sorgen das die Kodierung stimmt. Und dort müsste es dann auch eine Einstellung für die Kodierung geben wenn man das beeinflussen können möchte.

Edit: ANSI gibt's nicht wirklich als Kodierung, das ist so eine komische Windowseigenart das so zu nennen. Ist in der Regel dann tatsächlich cp1252.
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

stefanxfg hat geschrieben:Das mag ja sein. Aber ich benötige die Lösung auch für den GUIDesigner, da ich ihn durchaus benutzen möchte und aber bisher die Dateien auf ANSI-Format exportiert werden. Das liegt nicht an Notepad++. Das Format muss irgendwo anders enzustellen gehen.
Du scheinst nicht zu verstehen, was ANSI bedeutet. Es ist eine Teilmenge von so ziemlich jedem Zeichenvorrat und was als ANSI abgespeichert wird, kannst Du sowohl mit UTF-8 wie auch mit ISO weiterverarbeiten.
BlackJack

@Melewo: Ich denke Du verwechselst gerade ANSI und ASCII. ;-)
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

BlackJack hat geschrieben:@stefanxfg: Wenn die Dateien aus dem GUI-Designer kommen, dann muss der dafür sorgen das die Kodierung stimmt. Und dort müsste es dann auch eine Einstellung für die Kodierung geben wenn man das beeinflussen können möchte.
Also, was aus dem GuiDesigner kommt, stimmt. Das ist UTF-8 und dieser Kommentar wird seit vielleicht einer oder zwei Wochen mit generiert.

Dass der GuiDesigner alle möglichen ANSI Codierungen encodieren soll, das muss wohl nicht sein. Wenn jemand eine andere Codierung haben will - worum auch immer - kann er mit IDLE eine andere Kommentarzeile einfügen und dann neu abspeichern.

Man sollte eben nur einen passenden Editor nehmen, der die Codierung richtig erkennt und nicht statt ä dann irgendwie \#ef\#58
keine Ahnung, wie das aussieht, drin stehen hat.
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

BlackJack hat geschrieben:@Melewo: Ich denke Du verwechselst gerade ANSI und ASCII. ;-)
Eigentlich nicht, denke ich mir.
Bei dem ANSI-Zeichencode handelt es sich um eine Erweiterung des ASCII-Codes.
https://de.wikipedia.org/wiki/ANSI-Zeichencode
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Ich meine, man sollte heutzutage utf-8 nehmen ubnd nicht veraltete ISO Normen für nationale Zeichensätze für ASII Werte von 128 bis 255.

Andere Schriften, wie chinesisch, haben viel mehr Zeichen und daher setzen sich heutige Zeichen auch aus mehr Bytes zusammen, wie auch bei utf-8.

Das geht eben mit utf-8:

Bild

Und auch hier geht es:

Code: Alles auswählen

# -*- coding: utf-8 -*-

try:
    import tkinter as tk
except ImportError:
    import Tkinter as tk


class Application(tk.Tk):

    def __init__(self,**kwargs):
        tk.Tk.__init__(self,**kwargs)
        # widget definitions ===================================
        self.button = tk.Button(self,text='房屋, 屋顶, 爱屋及乌')
        self.button.pack()

if __name__ == '__main__':
    Application().mainloop()
UTF-8 ist eben der heutige Standard
BlackJack

@Alfons Mittelmeyer: Ich habe im Quelltext vom GuiDesigner aber kein `open()` zum schreiben gefunden bei dem irgendwie dafür gesorgt wird, das in UTF-8 gespeichert wird. Das passiert ja nicht automatisch, sondern höchstens zufällig, wenn man zum Beispiel Linux verwendet und dort in der Regel UTF-8 im System eingestellt ist ohne das der Anwender da etwas für tun muss. Unter Windows ist UTF-8 aber eher sehr selten die Systemeinstellung. Das muss der Anwender selbst irgendwo einstellen.

@Melewo: Doch, ziemlich sicher verwechselst Du ANSI und ASCII. Denn das was Du schreibst gilt für ASCII, aber nicht für ANSI. ASCII ist von den fast allen Zeichenkodierungen die wir hier im Westen benutzen eine Untermenge. Unter anderem ist ASCII auch von ANSI und von UTF-8 und von allen ISO-8859-*-Kodierungen und vielen Windows-Codepages eine Untermenge. ANSI ist dagegen weder von UTF-8 noch von den ISO-8859-*-Kodierungen eine Untermenge. Du kannst also nicht als ANSI speichern und problemlos als UTF-8 oder ISO-8859-irgendwas öffnen. Das geht aber mit ASCII.
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

Alfons Mittelmeyer hat geschrieben:Ich meine, man sollte heutzutage utf-8 nehmen ubnd nicht veraltete ISO Normen für nationale Zeichensätze für ASII Werte von 128 bis 255.
Womit Du zu 100% Recht hast.
Es war auch etwas abseits vom Thema, weil der Notepad++ halt alle Dateien, die keine speziellen Zeichen enthalten, die nicht im ANSI oder ASCII enthalten sind, als ANSI öffnet und speichert. So liegen bei mir nach einem Download z.B. alle Dateien einer WordPress-Installation lokal als ANSI-Dateien auf dem Rechner, obwohl diese im Web und lokal problemlos unter UTF-8 laufen.
stefanxfg
User
Beiträge: 85
Registriert: Sonntag 2. April 2017, 14:11

Hallo Alfons, ich denke Blackjack hat recht. Das heißt nicht, dass der GUIDesigner nicht gut ist. Du musst das eben anfangen, dass was bei dir oder einem anderen Editor automatisch passiert.
Wenn Notepad dann ANSI erkennt, ist das eben so. Schau mal nach, ob es da eine Deklaration gibt, so dass Notepad keine Fehler mehr macht.Nimm es daher als Ratschlag an und verbessere dein Programm, um das Fehlgehen andere Programme zu verhinder.

Übrigens stimmt das. Das Notepad hebt farblich wirklich wenig hervor.
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

stefanxfg hat geschrieben:Übrigens stimmt das. Das Notepad hebt farblich wirklich wenig hervor.
Der hebt bei mir nicht weniger farblich hervor, als vergleichsweise bei PHP und darüber hinaus noch selbstdefinierte Funktionen, die bei PHP nicht hervorgehoben werden.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

stefanxfg hat geschrieben:Hallo Alfons, ich denke Blackjack hat recht. Das heißt nicht, dass der GUIDesigner nicht gut ist. Du musst das eben anfangen, dass was bei dir oder einem anderen Editor automatisch passiert.
Ja stimmt, ich habe mir das unter windows noch gar nicht angeschaut. Sondern nur in Linux. Unter Windows wird anscheinend cp1252 gschgrieben. Da paßt natürlich der Kommentar nicht.

Da muß ich, wie Blackjack bereits angemerkt hatte, bei den paar Stellen, wo ich speichere, dafür sorgen, dass da in UTF-8 geschrieben wird. Und gut wäre, wenn die Script-Files auch alle utf-8 wären, obwohl das in Python3 nichts ausmacht, solange man nicht editieren will. Naja ist nur eine Kleinigkeit. Aber man merkt es eben nicht, wenn man nur in Linux gearbeitet hat.

Das mache ich gleich.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Man findet of das, was hier in der ersten Zeile steht:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-
Sieht aus, wie ein Linux Verzeichnis. Hat das eine Bedeutung?
BlackJack

@Alfons Mittelmeyer: Dadurch weiss Linux wie es die Datei ausführen soll. Wenn man die Datei mit ``chmod`` als ausführbar kennzeichnet, dann wird das nach dem ``#!`` genommen und der Dateiname hinten angehängt und dann das ganze ausgeführt. Also wenn das in einer Datei mit dem Namen ``hallo.py`` steht, dann würde bei der Eingabe von ``./hallo.py`` in dem Verzeichnis in einer Shell ``/usr/bin/env python hallo.py`` ausgeführt. Dadurch kann man in Linux jede Textdatei als Programm ausführen und sagen welches Programm die Textdatei interpretieren soll. Das Programm muss dann nur diese erste Zeile ignorieren, entweder explizit, oder weil das ``#`` sowieso als Kennzeichen für eine Kommentarzeile behandelt wird.
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

BlackJack hat geschrieben:@Melewo: Doch, ziemlich sicher verwechselst Du ANSI und ASCII. Denn das was Du schreibst gilt für ASCII, aber nicht für ANSI. ASCII ist von den fast allen Zeichenkodierungen die wir hier im Westen benutzen eine Untermenge. Unter anderem ist ASCII auch von ANSI und von UTF-8 und von allen ISO-8859-*-Kodierungen und vielen Windows-Codepages eine Untermenge. ANSI ist dagegen weder von UTF-8 noch von den ISO-8859-*-Kodierungen eine Untermenge. Du kannst also nicht als ANSI speichern und problemlos als UTF-8 oder ISO-8859-irgendwas öffnen. Das geht aber mit ASCII.
Gut, dann dürfte es am Editor liegen, dass der solange in einer Datei nur Zeichen entsprechend ASCII enthalten sind, diese mit ANSI anzeigt, obwohl eigentlich ASCII zutreffend sein sollte. Jedenfalls gab es noch nie Probleme damit, weil ein Parser oder Interpreter die enthaltenen Codes richtig abarbeitet und allenfalls die Ausgabe oder Speicherung in einer DB von betroffen sein könnte. Bei einer Verbindung zur Datenbank muss ich nur einen Charset setzen, bei Regex war es auch mit Umlauten so.
Antworten