wxPython umlaute

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

Dienstag 23. Mai 2006, 18:25

Hallo

Habe ein "kleineres" Problem mit wxPython

Coding in meinen Dokumenten latin-1 aber wie es scheint nicht in den wxPython Files denn...

Code: Alles auswählen

Traceback (most recent call last):
    File "./Desktop/m3u.py", line 250 in ?
        frame = Frame(None, -1, "M3U Maker")
    File "./Desktop/m3u.py", line 160 in __ini__
        self.Open=wx.Button(panel, -1, "*ffnen")
    File "/usr/lib/python2.4/site-packages/wx.2.6-gtk2-unicode/wx/_controls.py", line 79, in __init__
        newobj = _controls_new Buttton(*args, **kwargs)
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 0-1: invalit data
Und das nur unter Linux, auf Windows läuft es bestens :oops:

Hat es etwas mit meiner wxpython version zu tun?!

Gruss DM
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 23. Mai 2006, 21:47

DatenMetzgerX hat geschrieben:Coding in meinen Dokumenten latin-1 aber wie es scheint nicht in den wxPython Files denn...
[...]
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 0-1: invalit data[/code]
Hi DM!

Mit einem kleinen "u" vor dem String, sollte es auch unter Linux funktionieren.

Code: Alles auswählen

self.Open=wx.Button(panel, -1, u"öffnen")
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

Dienstag 23. Mai 2006, 21:51

Gerade keine Zeit zum testen, aber wird sicher gehen ;)

u für Unicode?!

Noch eine frage...

wenn ich z.B einen Event an eine Funktion anbinde z.B. so

Code: Alles auswählen

self.Bind(wx.EVT_BUTTON, self.OnClick, cmdButton)

def OnClick(self, event, more):
    pass
Wie kann ich dann parameter übergeben?

Gruss
DM
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 23. Mai 2006, 22:08

DatenMetzgerX hat geschrieben: u für Unicode?!
[...]

Code: Alles auswählen

self.Bind(wx.EVT_BUTTON, self.OnClick, cmdButton)
def OnClick(self, event, more):
    pass
Wie kann ich dann parameter übergeben?
Hi DM!

Ja, "u" für Unicode. Wenn du mit wxPython irgendwelche Umlautprobleme hast --> dann versuche Unicode zu übergeben. Das funktioniert meistens.

Du kannst auch so schreiben:

Code: Alles auswählen

cmdButton.Bind(wx.EVT_BUTTON, self.OnClick)
def OnClick(self, event):
    pass
Allerdings kannst du keinen Parameter übergeben. Wofür brauchst du den Parameter? Vielleicht bekommst du die Information, die du brauchst, ja auch vom "event"-Objekt. Siehe: http://wxpython.org/docs/api/wx.Event-class.html

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 23. Mai 2006, 22:15

How can my EVT_XYZ handler find the control that generated an event?
http://wiki.wxpython.org/index.cgi/Freq ... 76800470a0
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

Mittwoch 24. Mai 2006, 08:16

Du kannst Parameter einfach mit Lambda übergeben.
Z.B. so

Code: Alles auswählen

self.controlTree.Bind(wx.EVT_TREE_SEL_CHANGED, lambda x: self.onDirCtrlActivated(x))
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Mittwoch 24. Mai 2006, 08:53

pr0stAta hat geschrieben:Du kannst Parameter einfach mit Lambda übergeben.
Hi pr0stAta!

Bitte poste hier ein funktionierendes Beispiel, da ich es irgendwie mit Lambda nicht hin bekomme. Bei mir wird weiterhin das Event-Objekt an die Funktion übergeben.

Das ist der Code mit dem ich es ausprobiert habe.

Code: Alles auswählen

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

import wx

def OnButton(param1, param2 = None):
    print type(param1)
    print type(param2)

app = wx.PySimpleApp()
frame = wx.Frame(None)
button = wx.Button(frame, -1, "Hallo")
x = "Seavas"
button.Bind(wx.EVT_BUTTON, lambda x: OnButton(x))
frame.Show()
app.MainLoop()

Code: Alles auswählen

<class 'wx._core.CommandEvent'>
<type 'NoneType'>
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

Mittwoch 24. Mai 2006, 09:31

Hatte bei mir einen Fehler drin, wenn ich mich recht erinnere
sollte die Syntax so sein:
lambda EVENT: FUNKTION(Parameter)
Das würde auch deine Ausgabe

Code: Alles auswählen

<class 'wx._core.CommandEvent'>
<type 'NoneType'>

erklären denn du überschreibst x mit dem Event

Also wenn ich dein Beispiel aufgreife:

Code: Alles auswählen

import wx

ID_TEST = wx.NewId()

def OnButton(x):
  print x

app = wx.PySimpleApp()
frame = wx.Frame(None)
button = wx.Button(frame, ID_TEST, "Hallo")
x = "Seavas"
button.Bind(wx.EVT_BUTTON, lambda event: OnButton(x))
frame.Show()
app.MainLoop()
Gruss
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Mittwoch 24. Mai 2006, 11:15

pr0stAta hat geschrieben:lambda EVENT: FUNKTION(Parameter)
Hi pr0stAta!

Ja, so geht's. :-)

Code: Alles auswählen

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

import wx

def OnButton(param1, param2 = None):
    print type(param1)
    print type(param2)
    print param2

app = wx.PySimpleApp()
frame = wx.Frame(None)
button = wx.Button(frame, -1, "Hallo")
x = "Seavas"
button.Bind(wx.EVT_BUTTON, lambda event: OnButton(event, x))
frame.Show()
app.MainLoop()

Code: Alles auswählen

<class 'wx._core.CommandEvent'>
<type 'str'>
Seavas
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Mittwoch 24. Mai 2006, 17:38

Neue Frage, neues Thema.

Ich habe die neue Frage abgetrennt und einen neuen Thread daraus gemacht.

http://www.python-forum.de/topic-6056.html

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten