plattformunabhängiges Design?

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Burax
User
Beiträge: 3
Registriert: Donnerstag 25. September 2008, 14:05

Hallo,
für ein plattformunabhängiges Projekt benutze ich Python, allerdings findet die hauptsächliche Entwicklung unter Windows statt (sry, bin Linux-Dau).
Lasse ich die ganze Geschichte dann unter einem anderen OS laufen (hier: Ubuntu), passt ein Großteil der Abmessungen nicht mehr - Fenster sind um den Betrag der Titelzeile(?) höher, Bilder werden (viel) kleiner dargestellt, Fonts sind ohnehin unterschiedlich..
Wer weiß da Abhilfe? Ich habe überall gesucht, finde aber nix Schlüssiges. Mit den Abweichungen könnte ich ja leben, nur sollten die kalkulierbar sein. Muß ich eine andere Bezugsgröße als Pixel nehmen oder sowas?
Danke für jede Hilfe..
BlackJack

Du solltest Dich gar nicht selber um die Abmessungen kümmern, sondern entsprechende Layout-Elemente verwenden. Bei `wx` heissen die `Sizer`.
Burax
User
Beiträge: 3
Registriert: Donnerstag 25. September 2008, 14:05

Hi,
BlackJack hat geschrieben:Du solltest Dich gar nicht selber um die Abmessungen kümmern, sondern entsprechende Layout-Elemente verwenden. Bei `wx` heissen die `Sizer`.
Vielleicht habe ich mich da falsch ausgedrückt, daß ich mit Sizern die Positionierung von Elementen zueinander regeln kann ist mir schon klar, das brauche ich in diesem Fall aber nicht. Mir gehts nur darum, daß meine Fensterelemente in beiden OS grundsätzlich gleich aussehen sollen.
Das Problem dabei ist, daß wenn ich ein Fenster mit der Size 400x200 Pixel erzeuge, ist das mit Windows auch genau 400x200 Pixel groß, in Ubuntu aber 400x230 o.ä. Ein wxImage (in Verbindung mit einem wxBitmapButton), welches sagen wir mal 40x30 Pixel groß ist, wird in Windows mit 40x30, in Ubuntu aber mit einer Größe von vielleicht 24x17 Pixel angezeigt. Pixel ist doch Pixel, ich verstehe halt nicht wo die Abweichungen herkommen.
Die Schriftarten passen zwar auch nicht, aber hier weiß man ja wenigstens daß die sowieso unterschiedlich sind.
Kann ja sein, daß WIN/GTK unterschiedlich arbeiten, damit kann man auch leben, nur muß da ja ein System dahinterstecken welches auch beschrieben ist..
BlackJack

Was hast Du denn beim Fenster gemessen? Den Inhalt oder auch Rahmen und Titelleiste? Letzteres ist bei Linux/Unix Aufgabe des Fenstermanagers und nicht des GUI-Toolkits. So ein Programm weiss ja im "schlimmsten" Fall nicht einmal auf welchem Rechner mit welchem Fenstermanager der Fenster*inhalt* letztendlich angezeigt wird.

Wobei die Fenstergrösse für mich zu den Dingen gehört, die man nicht vorgeben sollte, weil die sich ja aus dem Fensterinhalt ergibt.

Wird das Bild runterskaliert oder nur halb angezeigt? Kannst Du ein minimales Beispiel + Bilddatei zeigen, so dass man das nachvollziehen kann?
Burax
User
Beiträge: 3
Registriert: Donnerstag 25. September 2008, 14:05

Hi,
BlackJack hat geschrieben:Was hast Du denn beim Fenster gemessen? Den Inhalt oder auch Rahmen und Titelleiste? Letzteres ist bei Linux/Unix..
Tja, das wusste ich als DAU nicht, das erklärt aber zumindest den Unterschied bei den Fenstern. Ziehe ich bei Unixen die Höhe der Titelzeile wieder ab, ok.
BlackJack hat geschrieben:Wobei die Fenstergrösse für mich zu den Dingen gehört, die man nicht vorgeben sollte, weil die sich ja aus dem Fensterinhalt ergibt.
Da gebe ich dir recht, mache ich auch nicht - konkret war es aber hier das Login-Fenster, und (nur) das hat eine feste Größe.
BlackJack hat geschrieben:Wird das Bild runterskaliert oder nur halb angezeigt? Kannst Du ein minimales Beispiel..
Das Bild wird runterskaliert, ist also komplett da. Ein Screenshot kann ich jetzt gerade schlecht schicken, aber codemäßig kann man das reduzieren auf

ich habe eine Bitmap, die erzeugt wurde durch:
bitmap = wx.Image(Bildname,wx.BITMAP_TYPE_PNG).ConvertToBitmap()

dann greife ich davon die Größe ab (müsste nicht sein, ist eh bekannt):
bsize = (bitmap.GetWidth(),bitmap.GetHeight())

danach baue ich meinen Button zusammen:
button = wx.BitmapButton(self, -1, bitmap, pos = (x, y), size = bsize, style = wx.NO_BORDER)

So in der Art.
Die Zwischenwerte wie bsize habe ich mir anzeigen lassen, sind unter allen OS gleich, nur wird der BitmapButton unter Linux einfach kleiner dargestellt..
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Burax hat geschrieben:
BlackJack hat geschrieben:Was hast Du denn beim Fenster gemessen? Den Inhalt oder auch Rahmen und Titelleiste? Letzteres ist bei Linux/Unix..
Tja, das wusste ich als DAU nicht, das erklärt aber zumindest den Unterschied bei den Fenstern. Ziehe ich bei Unixen die Höhe der Titelzeile wieder ab, ok.
Nun, das wird dir aber kaum helfen, denn wie groß ist eine Titelzeile? Es gibt WMs, die gar keine Titelzeile anzeigen, weil die die Fensternavigation anders machen. Es spricht genauso nichts dagegen, die Titelleiste seitlich am Fenster anzubringen. Oder einen dicken Rahmen mit Buttons mit denem man die Fenster umschalten kann.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten