Komisches Aussehen unter Windows

Plattformunabhängige GUIs mit wxWidgets.
basti33
User
Beiträge: 56
Registriert: Donnerstag 24. August 2006, 15:05

Freitag 22. Dezember 2006, 13:08

Hallo,

ich habe mir ein kleines Programm mit wxPython geschrieben, das auch so läuft wie soll. Das einzige Problem ist, dass es unter Windows einfach scheiße aussieht.
http://img151.imageshack.us/my.php?imag ... hotms1.jpg Mich stören die dunkelgrauen Teile des Fensters. Ich dachte immer, das tolle an wxPython wäre der native Look&Feel. Was mache ich falsch? Unter Linux habe ich native Look&Feel.

Danke
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Freitag 22. Dezember 2006, 13:52

Das ist der native Look (so wie du ihn eingestellt hast (oder per default) unter "Darstellung"). Jedes Element hat eine definierte Farbe. Kuck mal unter Eigenschaften Darstellung.

Rechtsklick auf den Desktop->Eigenschaften->Darstellung->Erweitert.

Dort ist die Farbe vergeben wie bestimmte Elemente aussehen sollen. Z.B. Der Rand eines inaktieven Fensters oder die Hintergrundfarbe eines Dialogs, usw.

lg

EDIT: Korrektur.
Zuletzt geändert von sape am Freitag 22. Dezember 2006, 13:55, insgesamt 1-mal geändert.
basti33
User
Beiträge: 56
Registriert: Donnerstag 24. August 2006, 15:05

Freitag 22. Dezember 2006, 13:55

Danke.

Was muss ich in meinem Programm angeben, dass der Fensterhintergrund genauso grau wird, wie beispielsweise die Menüleiste?

Danke
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Freitag 22. Dezember 2006, 14:00

Also du möchtest die Farbe im Programm direkt fest einstellen? Von welchen wxWidget hast du abgeleitet? wxFrame?

€: Moment ich kuck mal eben in der doku...
Zuletzt geändert von sape am Freitag 22. Dezember 2006, 14:00, insgesamt 1-mal geändert.
basti33
User
Beiträge: 56
Registriert: Donnerstag 24. August 2006, 15:05

Freitag 22. Dezember 2006, 14:00

sape hat geschrieben:wxFrame?
Ja
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Freitag 22. Dezember 2006, 14:01

Ich schau mal eben in der doku
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Freitag 22. Dezember 2006, 14:09

http://wxwidgets.org/manuals/2.6.3/wx_w ... oundcolour

Z.B.:

Code: Alles auswählen

self.SetBackgroundColour((0, 0, 0))
Das wir im Konstruktor gemacht. Ob es außerhalb vom Konstruktor geht habe ich noch nicht getestet. Es wird also ein Tumple übergeben, das die Werte als RGB angegeben hat (Z.B. (0, 0, 0,) für Schwarz)

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-
import wx
        
class MainFrame(wx.Frame):
    def __init__(self, parent=None, id=-1, title = "MyApp"):
         wx.Frame.__init__(self, parent, id, title)
         
         self.SetBackgroundColour((0, 0, 0))
         
                  
def main():
    app = wx.PySimpleApp()
    mf =  MainFrame()
    mf.Show()
    app.MainLoop()

if __name__ == "__main__":
    main()
lg
Zuletzt geändert von sape am Freitag 22. Dezember 2006, 14:12, insgesamt 1-mal geändert.
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Freitag 22. Dezember 2006, 14:11

Die Methode haben alle xwWidgets die von `wxWindow` abgeleitet sind. Also alle GUI-Spezifischen wxWidgets.
basti33
User
Beiträge: 56
Registriert: Donnerstag 24. August 2006, 15:05

Freitag 22. Dezember 2006, 14:12

Danke.

Aber ein paar Fragen habe ich noch.
1. Muss ich jetzt nachschauen, welches Grau dem Windowsgrau am ähnlichsten ist, und das dann einsetzen?
2. Wie wird das in anderen Programmen gemacht? Ich habe noch nie ein Programm gesehen, das einen solchen Hintergrund hat.

Danke
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 22. Dezember 2006, 14:13

Nein, in der Regel reicht es einfach ein wx.Panel in den wx.Frame zu knallen und dort dann die Widgets anzuordnen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Freitag 22. Dezember 2006, 14:17

basti33 hat geschrieben: 1. Muss ich jetzt nachschauen, welches Grau dem Windowsgrau am ähnlichsten ist, und das dann einsetzen?
Ja. Du installierst dir ein Programm wie Gimp und suchst dir den Farbton aus den du haben möchtest. Es wird dir bei der Farbauswahl immer die RGB Werte angezeigt. Diese Trägst du dann ein.

Ich persönlich würde aber keine Feste Vorgabe von Farbwerten in der Applikation einprogrammieren, sondern es dem OS überlassen. Das sorgt für ein einhaltliches Design aller Applikationen.
basti33 hat geschrieben: 2. Wie wird das in anderen Programmen gemacht? Ich habe noch nie ein Programm gesehen, das einen solchen Hintergrund hat.
Versteh die Frage nicht recht. Bitte genauer erklären was du meinst.

Ich habe aber noch eine Alternative die aber ein wenig unsauberer ist.
Moment ich schreib das mal kurz...
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Freitag 22. Dezember 2006, 14:21

Leonidas hat geschrieben:Nein, in der Regel reicht es einfach ein wx.Panel in den wx.Frame zu knallen und dort dann die Widgets anzuordnen.
Exakt. Genau das meinte ich mit meinen anderen Vorschlag. Da hatten wir den gleichen Gedanken ^^

Code: Alles auswählen

import wx
        
class MainFrame(wx.Frame):
    def __init__(self, parent=None, id=-1, title = "MyApp"):
         wx.Frame.__init__(self, parent, id, title)
         
         # Der wxPanel im wxFrame. Alle weiteren Widgets sollten dann 
         # Natürlich die Instanz vom wxPanle als Parent bekommen.
         # In dem beispiel halt bg.
         bg = wx.Panel(self)
         
         
                  
def main():
    app = wx.PySimpleApp()
    mf =  MainFrame()
    mf.Show()
    app.MainLoop()

if __name__ == "__main__":
    main()
Zuletzt geändert von sape am Freitag 22. Dezember 2006, 14:21, insgesamt 1-mal geändert.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 22. Dezember 2006, 14:21

sape hat geschrieben:Du installierst dir ein Programm wie Gimp und suchst dir den Farbton aus den du haben möchtest. Es wird dir bei der Farbauswahl immer die RGB Werte angezeigt. Diese Trägst du dann ein.

Ich persönlich würde aber keine Feste Vorgabe von Farbwerten in der Applikation einprogrammieren, sondern es dem OS überlassen. Das sorgt für ein einhaltliches Design aller Applikationen.
Hä? Ich denke du widersprichst dir grad selbst: erst sagst du, dass es nur per Farbeingabe geht und dann sagst du dasss man das dem OS überlassen soll.

Natürlich soll man sowas dem Toolkit überlassen! Dafür ist es ja auch da, und einige GTK-Engines ignorieren Farben auf bestimmten Widgets generell.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
basti33
User
Beiträge: 56
Registriert: Donnerstag 24. August 2006, 15:05

Freitag 22. Dezember 2006, 14:23

Und wieso ist die Lösung mit dem wx.Panel jetzt "unsauber"?
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 22. Dezember 2006, 14:28

basti33 hat geschrieben:Und wieso ist die Lösung mit dem wx.Panel jetzt "unsauber"?
Sie ist IMHO gar nicht unsauber.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten