wx.ListCtrl Hintergrundfarbe einer Zelle nicht Zeile

Plattformunabhängige GUIs mit wxWidgets.
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

wx.ListCtrl Hintergrundfarbe einer Zelle nicht Zeile

Beitragvon JR » Donnerstag 28. September 2006, 16:41

Hallo!

Kann man in einer ListCtrl die Hintergrundfarbe einer Zelle schalten?

Mit

Code: Alles auswählen

index = 0
item = self.GetItem(index)
item.SetBackgroundColour((255,255,0))
self.SetItem(item)


kann ich nur die Hintergrundfarbe der ganzen (hier 1.) Zeile auf (hier) gelb setzen!?

Möchte auffällige Werte in einer Liste farblich hervorheben.

Wenn das nicht geht, dann :x

Grüße aus Berlin
JR
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

Beitragvon DatenMetzgerX » Donnerstag 28. September 2006, 18:32

Schau dir einfach mal die Dokumentation an von wx.ListCtrl...

Code: Alles auswählen

SetItemBackgroundColour(self, item, col)


demfall

Code: Alles auswählen

self.SetItemBackgroundColour(listitem, 1)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: wx.ListCtrl Hintergrundfarbe einer Zelle nicht Zeile

Beitragvon gerold » Donnerstag 28. September 2006, 18:35

JR hat geschrieben:Kann man in einer ListCtrl die Hintergrundfarbe einer Zelle schalten?

Hi JR!

Schau dir in der wxPython-Demo, die Demo des "ListCtrl_virtual" an. Dort werden Zeilen eingefärbt.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Beitragvon JR » Donnerstag 28. September 2006, 18:39

Hi Gero!

Ich meinte ZELLE nicht ZEILE :-)

Möchte nicht immer die ganze Zeile farblich darstellen, sondern nur bestimmte Zellen in einer Zeile einfärben.

Mal eine zweite (ganz andere Frage):
Du bist für mich bisher hier der Plone-Crack. Ich muss unbedingt an die Passwörter meiner registrierten Benutzer kommen, um sie parallel in einer MySQL-Tabelle zu sichern. Diese Tabelle wird von meiner Webapplikation in Plone und gleichzeitig in einer ähnlichen Applikation in wx.Python verwendet. Letzter soll einen Benutzerzugang für diesselben Anwender erhalten.

Grüße und hoffe, du weißt da etwas zu zu schreiben
JR
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Donnerstag 28. September 2006, 19:08

JR hat geschrieben:Ich muss unbedingt an die Passwörter meiner registrierten Benutzer kommen

Hi JR!

Das geht nicht, da nur der MD5-Hash gespeichert wird.
Es gibt evt. eine andere Möglichkeit -- man kann die Plone-Benutzer auch von anderen Systemen wie z.B. ActiveDirectory verwalten lassen. Es gibt also eine Möglichkeit, Plone mit anderen Systemen zu verbinden. Allerdings habe ich davon keine Ahnung.

--> http://www.dzug.org/kommunikation
oder
--> http://plone.org/support

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Beitragvon JR » Donnerstag 28. September 2006, 19:15

Hi!

Danke erstmal für die schnelle Reaktion.

Das verstehe ich nicht. Wenn meine Benutzer zum Beispiel ihr Passwort ändern, geben sie es in ein Formular ein. Irgendwie muss ich doch in dem Augenblick, wo sie es absenden, an den Inhalt des Feldes für das neue Passwort kommen!?

Naja.

Wie ist es mit dem Einfärben einzelner Zellen? Ich befürchte, das geht nicht, oder? Hab da mal wo aufgeschnappt, dass jemand deswegen die Liste vom Typ wx.ListCtrl nicht mag. Dachte aber, evtl. hat er es einfach nur nicht hinbekommen, weniger als immer eine ganze Zeile einzufärben...

Gruß
JR
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Beitragvon Francesco » Freitag 29. September 2006, 10:51

Hallo, Ich glaube, das geht nicht, einzelne Zellen
einzufärben. Du könntest aber ein Grid verwenden.
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Beitragvon JR » Freitag 29. September 2006, 11:15

Hi!

Danke, das befürchte ich auch.
Hab mir jetzt in zwei, drei Tagen Arbeit so eine riesige und komfortable Bibliothek (basierend auf dem Objekt wx.ListCtrl) geschaffen und darf mich jetzt wohl ärgern... :oops:
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Freitag 29. September 2006, 11:25

JR hat geschrieben:Das verstehe ich nicht. Wenn meine Benutzer zum Beispiel ihr Passwort ändern, geben sie es in ein Formular ein. Irgendwie muss ich doch in dem Augenblick, wo sie es absenden, an den Inhalt des Feldes für das neue Passwort kommen!?

Hi JR!

Natürlich kommst du in **exakt diesem** Moment an das Passwort. Du musst nur einen zusätzlichen **Validator** an die Seitenvorlage heften. Dieser Validator bekommt alle, vom Formular übertragenen Daten übermittelt. Diese kannst du dann irgendwo abspeichern.

Achte aber auch darauf, dass es mehrere Stellen gibt, an denen ein Passwort eingegeben/geändert werden kann. Diese musst du auch anpassen.

Was ich sagen wollte ist, dass das Passwort nicht gespeichert wird. Willst du das Passwort nachträglich herausfinden, ist das nicht möglich, da du in Zope nur noch den MD5-Hash des Passworts finden wirst.

lg
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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Freitag 29. September 2006, 11:27

...Ein anderer Ansatzpunkt ist das Skript ``portal_skins/plone_login/register``. An dieses Skript wird das Passwort (wahrscheinlich) im Klartext übermittelt.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Beitragvon JR » Freitag 29. September 2006, 11:29

Hi Gerold!

Ich werde alle Benutzer einfach bitten, ihr Passwort einmal in einen Dummy und dann in das gewünschte Passwort zu ändern. Die Passwortänderung fange ich ab und notiere sie in meiner MySQL-Tabelle. Dasselbe mache ich beim Zurücksetzen von Passwörtern (Plone-Funktion).

Muss mir wohl nochmal das Kapitel zum MD5-Verschlüsseln in Python Ge-Packt durchlesen. Dachte über Benutzername und MD5-Hash komme ich aufs Passwort...

Danke für den Tipp mit dem Validator!

Grüße
JR
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Freitag 29. September 2006, 11:46

JR hat geschrieben:Muss mir wohl nochmal das Kapitel zum MD5-Verschlüsseln in Python Ge-Packt durchlesen. Dachte über Benutzername und MD5-Hash komme ich aufs Passwort...

Hi JR!

Mit MD5 erstellst du so etwas ähnliches wie eine Ziffernsumme -- nur viel komplexer.

Nehmen wir mal an, du hast zwei Passwörter ("123" und "234"). Wenn du alle Zahlen zusammenzählst, bekommst du eine Summe, mit der du prüfen kannst, ob jemand das korrekte Passwort eingegeben hat.

[code=]"123" --> 6
"234" --> 9[/code]

In diesem Beispiel wären die Ergebnisse 6 und 9 die Ziffernsummen. Wenn du später wieder herausfinden möchtest, ob jemand das korrekte Passwort übermittelt, dann bildest du aus dem übermittelten Passwort wieder so eine Ziffernsumme und vergleichst diese mit der gespeicherten Ziffernsumme.

So brauchst du nicht das Passwort zu speichern und deine Anwendung ist automatisch sicherer.

In diesem Beispiel ist es natürlich ziemlich einfach, andere Passwörter zu bilden die ebenfalls wieder die Ziffernsummen 6 oder 9 ergeben. Deshalb gibt es komplexere Algorithmen wie MD5 oder SHA, die aus einem String oder einer ganzen Datei einen langen eindeutigen Hashwert bilden. Dieser Hashwert ist ziemlich eindeutig und kann nur mit sehr hohem Rechenaufwand zurückgerechnet werden.

Wenn du den MD5-Hash statt dem Passwort in einer Datenbank speicherst dann weiß niemand, außer dem Benutzer selber, das Passwort und trotzdem kannst du das Passwort beim Anmelden anhand des gespeicherten MD5-Hashes auf Korrektheit prüfen.
Dazu errechnest du einfach erneut den MD5-Hash des übermittelten Passworts und vergleichst es mit dem MD5-Hash, den du in der Datenbank gespeichert hast.

lg
Gerold
:-)
Zuletzt geändert von gerold am Freitag 29. September 2006, 14:25, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Beitragvon JR » Freitag 29. September 2006, 11:54

Hey Gerold,

danke für die Erläuterung.

Du bist Site-Admin.
Vielleicht magst du diese Fragen zu Plone ja hier im Forum verschieben, damit andere Leser diese denke ich interessante Frage plus Antworten besser finden können?

JR
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Freitag 29. September 2006, 12:00

JR hat geschrieben:Du bist Site-Admin.
Vielleicht magst du diese Fragen zu Plone ja hier im Forum verschieben, damit andere Leser diese denke ich interessante Frage plus Antworten besser finden können?

Hi JR!

Das ist das Problem, wenn mehrere Frage in einem Thread behandelt werden. Manchmal ist es zu viel Arbeit die Themen aufzuteilen, da man dann auch Beiträge aufteilen müsste.

Ist zwar schade, aber dieses Thema aufzuteilen ist mir zu viel Arbeit. -- Sollte aber die Ausnahme bleiben.

Du könntest aber einen Beitrag ins Zope-Forum (mit ein paar Stichwörtern) schreiben und auf diesen Thread verweisen.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Beitragvon JR » Samstag 30. September 2006, 00:51

Guten Morgähn :-)

Nachdem ich mich nun seit einigen Stunden damit beschäftige, eine Subklasse des wx.grid.Grid zu erstellen und mich zunächst über die vielen Möglichkeiten erfreue, stehe ich nun vor einem Problem :-(

Mein Grid soll sich wie eine ganz normale Liste verhalten. Unter anderem soll die Zeilenhöhe nicht veränderbar sein. In der wx.Python-Refrenz wird ein Event namens "EVT_GRID_ROW_SIZE" erwähnt. Es klingt so, als sei dies das Event für meinen Fall. Nur wie kann ich ein Binding erstellen?

Das...

Code: Alles auswählen

self.Bind(wx.EVT_GRID_ROW_SIZE, self.EvtRowSize, self)


... geht leider nicht.

Und was sagt mir folgender Satz:
"The event handler for the following functions takes a wxGridSizeEvent parameter. The ..._CMD_... variants also take a window identifier."

Hat jemand schon mal Erfahrung in dieser Richtung gesammelt?

Hoffentlich findet sich mal jemand, dem ich Fragen beantworten kann ;-)

Grüße
JR

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder