Probleme mit OptionMenu und Umlauten

Fragen zu Tkinter.
Antworten
timo_81
User
Beiträge: 23
Registriert: Dienstag 11. März 2008, 18:08

Sonntag 6. April 2008, 13:34

Hi Leute,

nun die Überschrift ist nicht ganz richtig.
Ich bin gerade dabei mit python und tkinter ein kleines Verwaltungstool
zu basteln, dass ich privat für eine komfortable Erstellung v. Rechnungsdaten nutzen möchte.

Die Idee erstmal ist folgende:

-Es gibt eine Datei adressen.txt in folgendem Format:

Firma//Firmenname//Genre//Strasse//

dieses Abschnitte können ü,ö,ß, etc. beinhalten.

Ich möchte nun die zweite Position als der eigentlich Firmenname
in ein OptionMenu einlesen.

Leider liest er ziemlichen Müll ein. Das heisst er liest nicht jede Zeile der
Datei ein und wenn er was einliest kommt so was wie \x4c oder so drin vor.

Hier ist mein Code:

Code: Alles auswählen



#!/usr/bin/env python\
# -*- coding: utf-8 -*-



from Tkinter import *
import sys
import codecs
    
hauptfenster = Tk()

hauptfenster.geometry("1024x768")
hauptfenster.title("Verwaltungsmanager")


frame_einstellungen = LabelFrame(hauptfenster, text="Einstellungen")

#Variablendeklarationen
#Variable f\'fcr Radiobuttonauswertung
radio_ausgabe=StringVar(frame_einstellungen)
radio_ausgabe.set("Rechnung")

radio1=Radiobutton(frame_einstellungen,text="Rechnung",value="Rechnung",variable=radio_ausgabe,command="radio_ausgabe")
radio2=Radiobutton(frame_einstellungen,text="Angebot",value="Angebot",variable=radio_ausgabe,command="radio_ausgabe")
radio3=Radiobutton(frame_einstellungen,text="Mahnung",value="Mahnung",variable=radio_ausgabe,command="radio_ausgabe")
radio4=Radiobutton(frame_einstellungen,text="2.Mahnung",value="2.Mahnung",variable=radio_ausgabe,command="radio_ausgabe")
radio5=Radiobutton(frame_einstellungen,text="3.Mahnung",value="3.Mahnung",variable=radio_ausgabe,command="radio_ausgabe")

radio1.pack(side="left")
radio2.pack(side="left")
radio3.pack(side="left")
radio4.pack(side="left")
radio5.pack(side="left")
frame_einstellungen.pack(fill="both")



######################################\
# Welche Dokument soll erstellt werden\
#
# Radiobuttons auswerten\
#
#####################################\



if radio_ausgabe.get() == "Rechnung": #Wenn Radiobutton Rechung gedrückt wurde
    
    #Firmenlogo#
    frame_firmenlogo=LabelFrame(hauptfenster,text="Firmenlogo")
    logo_button=Button(frame_firmenlogo,text="\'c4ndern/\'dcbernehmen")
    label_logo_txt=Label(frame_firmenlogo,text="Aktuell geladenes Logo: ")
    label_logo_pfad=Label(frame_firmenlogo,text="pfad")
    label_logo_txt.pack(side="left")
    label_logo_pfad.pack(side="left")
    logo_button.pack(side="left")
    frame_firmenlogo.pack(fill="both")
    #Ende Firmenlogo#
    
    #Adresskopf#\
    frame_adresse=LabelFrame(hauptfenster,text="Adresskopf")
    frame_adresse.pack(fill="both")
    
    #Adresse wird aus einer Datei gelesen!
    # Dateiname ermitteln\
    dateiname = "/Users/user/Desktop/Kunden/adressen.txt" #Expliziten Pfad angeben
    daten=[]
    i=0
    # Datei lesen
    try:
        
        datei = codecs.open(dateiname, 'r', 'utf-8') #warum gehen trotzdem keine umlaute?
        for line in datei.readlines(): #Zeilenweise
         adresse =''.join(line)   #Liste -> String für split
         adressen_namen = adresse.split('//') #// ist das Trennzeichen
         daten.insert(i,adressen_namen[1])#Geb mir die Daten an der zweiten Stelle und mach ne Kiste draus
         default="irgendeinwert"
         adress_box=OptionMenu(frame_adresse,default,daten)#Schreibe die Liste in das OptionMenu
         i=i+1
         print daten
           
        datei.close()
    except IOError:
        print dateiname, "ist nicht lesbar"
        sys.exit(1)
    #Ende Adresskopf#
    
    
    adress_box.pack(side="left")


hauptfenster.mainloop()

#Was läuft das falsch?

audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Sonntag 6. April 2008, 14:04

Sind die Daten denn auch UTF-8?
timo_81
User
Beiträge: 23
Registriert: Dienstag 11. März 2008, 18:08

Sonntag 6. April 2008, 14:25

Nun die Datei 'Adressen.txt' wurde mit meinem macbook
mit TextEdit erstellt (und ich glaube unter utf-8 gespeichert) bin mir da aber nicht sicher.

Die Pythondatei wurde mit OpenKommodo erstellt auch auf dem mac..
timo_81
User
Beiträge: 23
Registriert: Dienstag 11. März 2008, 18:08

Sonntag 6. April 2008, 20:23

Also ich habe nun nochmals nachgesehen:

-adressen an denen es hagt sind in utf-8 abgespeichert
-mein betriebsystem mac osx 10.5.1 benutzt auch utf-8 als standard.

Trotzdem wird bei der Ausgabe meines Programms: ö,a etc. falsch darstellt.
Nämlich als \wc3 oder so komische codes.

Hat jemand einen Lösungsansatz?
Ich habe schon sämtlich tutorials gelesen und encodings ausprobiert!!!

Hilllllfffeeeee....
timo_81
User
Beiträge: 23
Registriert: Dienstag 11. März 2008, 18:08

Sonntag 6. April 2008, 21:39

es klappt nun:

Lösung:

Adressdaten muss in latin-1 gespeichert werden und im script
steht nun die Zeile:

Code: Alles auswählen

daten.insert(i,adressen_namen[1].decode("latin-1"))

und siehe an es geht!
BlackJack

Sonntag 6. April 2008, 22:09

Das mit Latin-1 ist falsch, die Daten können in *irgendeiner* Kodierung gespeichert werden, solange Du sie nur zu Unicode-Objekten wandelst, bevor Du sie in die GUI steckst.
timo_81
User
Beiträge: 23
Registriert: Dienstag 11. März 2008, 18:08

Montag 7. April 2008, 00:08

Hi,
ah ok danke für den Hinweis.
ich hätte noch kurz ne Frage (da wollte ich nicht extra ein neuen thread aufmachen)

Ich benutze noch ein Toplevel und wollte fragen ob es möglich ist dieses an das Hauptfenster andocken zu lassen?
Antworten