Seite 1 von 1
wxPython umlaute
Verfasst: Dienstag 23. Mai 2006, 18:25
von DatenMetzgerX
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
Hat es etwas mit meiner wxpython version zu tun?!
Gruss DM
Re: wxPython umlaute
Verfasst: Dienstag 23. Mai 2006, 21:47
von gerold
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.
mfg
Gerold

Verfasst: Dienstag 23. Mai 2006, 21:51
von DatenMetzgerX
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
Verfasst: Dienstag 23. Mai 2006, 22:08
von gerold
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

Verfasst: Dienstag 23. Mai 2006, 22:15
von gerold
How can my EVT_XYZ handler find the control that generated an event?
http://wiki.wxpython.org/index.cgi/Freq ... 76800470a0
Verfasst: Mittwoch 24. Mai 2006, 08:16
von pr0stAta
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))
Verfasst: Mittwoch 24. Mai 2006, 08:53
von gerold
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()
mfg
Gerold

Verfasst: Mittwoch 24. Mai 2006, 09:31
von pr0stAta
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
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
Verfasst: Mittwoch 24. Mai 2006, 11:15
von gerold
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()
mfg
Gerold

Verfasst: Mittwoch 24. Mai 2006, 17:38
von gerold
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
