wxColourDialog

Plattformunabhängige GUIs mit wxWidgets.
Antworten
akhof
User
Beiträge: 104
Registriert: Mittwoch 11. Mai 2011, 19:07
Kontaktdaten:

Hi!

Ich habe einen Dialog gemacht, um Farben auszuwählen. Mein Problem ist nun, dass ich eine Standartfarbe brauche, aber nicht weiß wie man soetwas hinbekommt :D :D :D

Ich habe schon einige Dinge verfsucht, die im Internet angeboten wurden, nichts hat funktioniert..

Viele Grüße
akhof :) :) :)
akhof
User
Beiträge: 104
Registriert: Mittwoch 11. Mai 2011, 19:07
Kontaktdaten:

Ich habe was gefunden, was schon etwas passender ist:

Code: Alles auswählen

...
dlg.GetColourData().SetColour(wx.WHITE)
Kennt jemand eine Möglichkeit dieses "wx.WHITE" durch (z.B.) soetwas wie (255, 0, 0) zu ersetzen? Ich habs nicht hinbekommen - Muss ja nichts heißen :D :D :D


akhof
BlackJack

@akhof: Dann schau doch einfach mal was `wx.WHITE` ist:

Code: Alles auswählen

In [149]: wx.WHITE
Out[149]: wx.Colour()
Und bei der Doku zu `wx.Colour` steht dann, dass überall wo der C++-Code von `wxWidgets` etwas vom Typ `wxColour` erwartet, man in Python auch eine Zeichenkette mit einem Farbnamen oder einer Farbe als Hex-Wert der Form '#RRGGBB', oder als drei- bis vierelementiges Tupel von Zahlen/Bytewerten übergeben kann. Also sollte ``(255, 0, 0)`` eigentlich gehen.
akhof
User
Beiträge: 104
Registriert: Mittwoch 11. Mai 2011, 19:07
Kontaktdaten:

Hab ich eigendlich auch gedacht, funktioniert bei mir aber nicht

Code: Alles auswählen

... .SetColour((255, 0, 0))
auch

Code: Alles auswählen

... SetColour("#ffaf15")
funtzt nicht :(
Zuletzt geändert von akhof am Sonntag 31. Juli 2011, 10:20, insgesamt 2-mal geändert.
BlackJack

@akhof: Eine Zeichenkette mit runden Klammern und Zahlen drin ist ja auch etwas anderes als ein Tupel. Kannst Du mal ein konkretes, minimales, lauffähiges Beispiel zeigen was das Problem illustriert? Und was heisst "funtzt [sic] nicht" eigentlich konkret? Welche Fehlermeldung bekommst Du dabei?
akhof
User
Beiträge: 104
Registriert: Mittwoch 11. Mai 2011, 19:07
Kontaktdaten:

ok...
Mit "funzt nicht" meinnte ich, dass IM Dialog beim Starten immer nur #000000 ausgewählt ist; sprich SCHWARZ. Eine Fehlermeldung bekomme ich nicht.
Auch mit einem Tupel ist die erste Farbe Schwarz.

Code: Alles auswählen

def BGcolour(self, event):
    dialog = wx.ColourDialog(self)
    dialog.GetColourData().SetChoosenFull(True)
    dialog.GetColourData().SetColour((255, 0, 0))
    if dialog.ShowModal() == wx.ID_OK:
        data = dialog.GetColourData().GetColour().Get()
Eine Sache noch: (Ich bin ein absoluter Neuling) Hier link ist (1, 2, 3) sehr wohl ein Tupel
Aber warum hast du geschrieben:
@akhof: Eine Zeichenkette mit runden Klammern und Zahlen drin ist ja auch etwas anderes als ein Tupel
??
BlackJack

@akhof: Die Dokumentation sagt, dass `GetColourData()` eine *Kopie* des `ColourData`-Objekts liefert:

Code: Alles auswählen

In [166]: wx.ColourDialog.GetColourData?
Type:           instancemethod
Base Class:     <type 'instancemethod'>
String Form:    <unbound method ColourDialog.GetColourData>
Namespace:      Interactive
File:           /usr/lib/python2.6/dist-packages/wx-2.8-gtk2-unicode/wx/_windows.py
Definition:     wx.ColourDialog.GetColourData(*args, **kwargs)
Docstring:
    GetColourData(self) -> ColourData                                           
    
    Returns a copy of the `wx.ColourData` used by the dialog.
Damit sollte klar sein, dass das verändern der Kopie keinen Einfluss auf den Dialog hat. Du musst ein entsprechendes `ColourData`-Objekt beim erstellen des Dialogs übergeben.

Die Bemerkung mit Zeichenkette ≠ Tupel bezog sich auf das ``... .SetColour("(255, 0, 0)")`` was Du ja inzwischen im Beitrag geändert hast.
akhof
User
Beiträge: 104
Registriert: Mittwoch 11. Mai 2011, 19:07
Kontaktdaten:

du meinst soetwas wie...

Code: Alles auswählen

####
colourdata = wx.ColourdData(wx.Colour((255, 0, 0))
dialog.GetColourData(colordata).SetChoosenFULL(True)
####
??

-----------------
vielen Dank übrigens :D
BlackJack

@akhof: Nein. Das hätte Dir beim ausprobieren auch auffallen müssen. Zum Beispiel das die `__init__()` von `wx.ColourdData` keine Argumente entgegen nimmt. Und das man beim Aufruf von `GetColourData()` nichts übergeben kann. Was sollte da auch der Sinn sein bei einer Methode die so ein Objekt vom Dialog *abfragt* eines mit zu geben.
akhof
User
Beiträge: 104
Registriert: Mittwoch 11. Mai 2011, 19:07
Kontaktdaten:

OK... Ich habs hinbekommen :D :D :D
---!!!Vielen Dank für die Hilfe!!!---

Code: Alles auswählen

bgC = self.BGcolour #[255, 0, 0]
colour = wx.Colour(bgC[0], bgC[1], bgC[2])
colourdata = wx.COLOURData()
colourdata.SetColour(colour)
dialog = wx.ColourDialog(self, data = colourdata)
dialog.GetColourData(
if dialog.ShowModal() == wx.ID_OK:
pass #...
Antworten