Liste darstellen

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Nils83
User
Beiträge: 29
Registriert: Montag 4. Juni 2007, 19:37

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
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Nils83
User
Beiträge: 29
Registriert: Montag 4. Juni 2007, 19:37

Moin!
genauso hab ich sowas gesucht! Hätte nicht gedacht, dass es so einfach geht.

Vielen Dank
Nils83
User
Beiträge: 29
Registriert: Montag 4. Juni 2007, 19:37

Eine Frage noch:
Wie kriege ich einen Zeilenumbruch in den übergegeben Text?
Sollte das nicht eigentlich mit \r\n gehen?

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

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
DER Olf
User
Beiträge: 283
Registriert: Mittwoch 24. Dezember 2003, 19:32

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
Nils83
User
Beiträge: 29
Registriert: Montag 4. Juni 2007, 19:37

Danke!
Wenn \n in einem String enhalten ist und angezeigt wird, sollte doch auch automatisch der Zeilenumbruch dargstellt werden oder?
DER Olf
User
Beiträge: 283
Registriert: Mittwoch 24. Dezember 2003, 19:32

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 ;)
Nils83
User
Beiträge: 29
Registriert: Montag 4. Juni 2007, 19:37

Danke!
Nils83
User
Beiträge: 29
Registriert: Montag 4. Juni 2007, 19:37

Gibt es was einfaches, um eine dictionary in eine Liste umzuwandeln oder mach ich das am besten über eine Schleife?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Nils83
User
Beiträge: 29
Registriert: Montag 4. Juni 2007, 19:37

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
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
Zuletzt geändert von gerold am Mittwoch 20. Juni 2007, 17:57, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Nils83
User
Beiträge: 29
Registriert: Montag 4. Juni 2007, 19:37

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]?
Zuletzt geändert von Nils83 am Mittwoch 20. Juni 2007, 18:34, insgesamt 1-mal geändert.
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

for key in 1? O_o
Nils83
User
Beiträge: 29
Registriert: Montag 4. Juni 2007, 19:37

Bezieht sich auf das Beispiel drüber
Antworten