Seite 1 von 1

Liste darstellen

Verfasst: Dienstag 19. Juni 2007, 13:40
von Nils83
Moin!
Ich würde gerne eine Liste
x = [1, 555, 100.000, 1234]
in einem Textfeld darstellen.

Code: Alles auswählen

...
self.control = wx.TextCtrl(self, 1, style=wx.TE_MULTILINE)
...
self.control.SetValue(x)
Führt jedoch zu folgendem Fehler:
line 1708, in SetValue
return _controls_.TextCtrl_SetValue(*args, **kwargs)
TypeError: String or Unicode type required
Gibt es evtl noch was anderes als SetValue oder kann mir jemand sagen wie ich die Liste geschickt in einen String oder ähnliches umwandle?

Besten Dank

Re: Liste darstellen

Verfasst: Dienstag 19. Juni 2007, 13:51
von gerold
Nils83 hat geschrieben:Ich würde gerne eine Liste
x = [1, 555, 100.000, 1234] in einem Textfeld darstellen.
Hallo Nils83!

Oder hast du es anders gemeint?

Code: Alles auswählen

self.control.SetValue(str(x))
oder

Code: Alles auswählen

self.control.SetValue(repr(x))
mfg
Gerold
:-)

Verfasst: Dienstag 19. Juni 2007, 13:58
von Nils83
Moin!
genauso hab ich sowas gesucht! Hätte nicht gedacht, dass es so einfach geht.

Vielen Dank

Verfasst: Dienstag 19. Juni 2007, 15:17
von Nils83
Eine Frage noch:
Wie kriege ich einen Zeilenumbruch in den übergegeben Text?
Sollte das nicht eigentlich mit \r\n gehen?

Gruß
Nils

Verfasst: Dienstag 19. Juni 2007, 15:36
von gerold
Nils83 hat geschrieben:Wie kriege ich einen Zeilenumbruch in den übergegeben Text? Sollte das nicht eigentlich mit \r\n gehen?
Hallo Nils!

Nein. In Python verwendet man "\n" (ohne \r). Außerdem musst du dein TextCtrl auf "Multiline" umschalten.

Code: Alles auswählen

my_textctrl = wx.TextCtrl(panel, style = wx.TE_MULTILINE | wx.TE_DONTWRAP)
--> http://wxwidgets.org/manuals/stable/wx_wxtextctrl.html

mfg
Gerold
:-)

Verfasst: Dienstag 19. Juni 2007, 15:37
von DER Olf
Hallo Nils83,

es gibt auf den unterschiedlichen betriebsysteme unterschiedliche steuerzeichen für zeilenumbrüche.

Unix --> \n
Windows --> \r\n
OS 9 --> \r (bin mir nicht sicher!)
OS X --> \n (wie Unix)

mit \n sollte man immer weit kommen ;)

grüße

Verfasst: Dienstag 19. Juni 2007, 15:57
von Nils83
Danke!
Wenn \n in einem String enhalten ist und angezeigt wird, sollte doch auch automatisch der Zeilenumbruch dargstellt werden oder?

Verfasst: Mittwoch 20. Juni 2007, 07:52
von DER Olf
in einem Textfeld welcher Sorte?

manche Toolkits (wxPythons Klassenhierarchie ist mir jetzt nicht bekannt) unterscheiden zwischen einzeiligen und mehrzeiligen Eingabefeldern.

In der Doku hab ich gefunden:

- du verwendest wxText
- verwenden musst du wxMultiText

grüße, lk ;)

Verfasst: Mittwoch 20. Juni 2007, 13:44
von Nils83
Danke!

Verfasst: Mittwoch 20. Juni 2007, 13:47
von Nils83
Gibt es was einfaches, um eine dictionary in eine Liste umzuwandeln oder mach ich das am besten über eine Schleife?

Verfasst: Mittwoch 20. Juni 2007, 14:14
von gerold
Nils83 hat geschrieben:Gibt es was einfaches, um eine dictionary in eine Liste umzuwandeln
Hallo Nils!

Code: Alles auswählen

>>> d = {"vorname": "Martin", "nachname": "Haller"}
>>> d.keys()
['nachname', 'vorname']
>>> d.values()
['Haller', 'Martin']
>>> d.items()
[('nachname', 'Haller'), ('vorname', 'Martin')]
>>> 
mfg
Gerold
:-)

Verfasst: Mittwoch 20. Juni 2007, 16:28
von Nils83
das tut schon mal wunderbar :)
danke


Wenn ich ein dictionary mit:

Code: Alles auswählen

d = {"1": "Martin", "2": "Hans", "3": "Klaus", "4": "Heinz", "5": "Werner"}
und eine Liste mit [3, 2, 4, 1, 5] hab.
Wie könnte ich dann die Keys im Dictionary so sortieren, dass sie die Reihenfolge der Liste haben?
geht das vielleicht irgendwie mit sort()

bwz. wo kann ich sowas am besten nachgucken?
Vielen Dank für eure Hilfe

Verfasst: Mittwoch 20. Juni 2007, 16:52
von gerold
Nils83 hat geschrieben:Wie könnte ich dann die Keys im Dictionary so sortieren, dass sie die Reihenfolge der Liste haben?
Hallo Nils!

Ein Dictionary lässt sich nicht sortieren. Es ist immer unsortiert. Wenn du eine Reihenfolge brauchst, dann verwende eine Liste zur Reihenfolgenbestimmung.

Code: Alles auswählen

>>> d = {1: "Martin", 2: "Hans", 3: "Klaus", 4: "Heinz", 5: "Werner"}
>>> my_list = [3, 2, 4, 1, 5]
>>> for key in my_list:
...     print key, d[key]
...     
3 Klaus
2 Hans
4 Heinz
1 Martin
5 Werner
>>> 
mfg
Gerold
:-)

Edit: Liste umbenannt

Verfasst: Mittwoch 20. Juni 2007, 17:29
von Nils83
Ok, danke
Wie mache ich sowas schöner?

Code: Alles auswählen

	y =[]
	for key in l:
	        y[:0] = d[key]
		print key, d[key]
	y.reverse()
Das reverse kann ich mir ja schenken, wenn ich die Sachen jeweils am Ende der Liste einfüge oder? (Ist das Ende bei y[:-19]?

Verfasst: Mittwoch 20. Juni 2007, 17:43
von veers
for key in 1? O_o

Verfasst: Mittwoch 20. Juni 2007, 18:13
von Nils83
Bezieht sich auf das Beispiel drüber