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
Ich habe schon einige Dinge verfsucht, die im Internet angeboten wurden, nichts hat funktioniert..
Viele Grüße
akhof
wxColourDialog
Ich habe was gefunden, was schon etwas passender ist:
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
akhof
Code: Alles auswählen
...
dlg.GetColourData().SetColour(wx.WHITE)
akhof
@akhof: Dann schau doch einfach mal was `wx.WHITE` ist:
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.
Code: Alles auswählen
In [149]: wx.WHITE
Out[149]: wx.Colour()
Hab ich eigendlich auch gedacht, funktioniert bei mir aber nicht
auch
funtzt nicht
Code: Alles auswählen
... .SetColour((255, 0, 0))
Code: Alles auswählen
... SetColour("#ffaf15")
Zuletzt geändert von akhof am Sonntag 31. Juli 2011, 10:20, insgesamt 2-mal geändert.
@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?
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.
Eine Sache noch: (Ich bin ein absoluter Neuling) Hier link ist (1, 2, 3) sehr wohl ein Tupel
Aber warum hast du geschrieben:
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()
Aber warum hast du geschrieben:
??@akhof: Eine Zeichenkette mit runden Klammern und Zahlen drin ist ja auch etwas anderes als ein Tupel
@akhof: Die Dokumentation sagt, dass `GetColourData()` eine *Kopie* des `ColourData`-Objekts liefert:
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.
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.
Die Bemerkung mit Zeichenkette ≠ Tupel bezog sich auf das ``... .SetColour("(255, 0, 0)")`` was Du ja inzwischen im Beitrag geändert hast.
du meinst soetwas wie...
??
-----------------
vielen Dank übrigens
Code: Alles auswählen
####
colourdata = wx.ColourdData(wx.Colour((255, 0, 0))
dialog.GetColourData(colordata).SetChoosenFULL(True)
####
-----------------
vielen Dank übrigens
@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.
OK... Ich habs hinbekommen
---!!!Vielen Dank für die Hilfe!!!---
---!!!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 #...