Probleme mit OptionMenu und Umlauten

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

Probleme mit OptionMenu und Umlauten

Beitragvon timo_81 » 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=]


#!/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?

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

Beitragvon audax » 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

Beitragvon timo_81 » 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

Beitragvon timo_81 » 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

Beitragvon timo_81 » 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

Beitragvon 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

Beitragvon timo_81 » 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?

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder