Seite 1 von 1

wxGlade - Unterschiede Linux - Windows

Verfasst: Donnerstag 19. März 2009, 20:42
von TiKaey
Ich habe nach einigen Mühen geschafft, mir eine GUI mit wxGlade zu basteln.
Irgendwann bin ich dann auch mehr oder weniger mit den Sizern klar gekommen, und es steht soweit.
Als ich allerdings das Programm dann mit der GUI unter Win gestartet habe, sah die anders aus... irgendwie wie nicht ganz richtig positioniert. Innerhalb eines FlexGrid (ich glaube so hieß es?) sind 6 Widgets... und die sind leicht verschoben. Und der Text in einem wxTextCtrl sind trotz Ausrichtung nicht zentriert, sondern an den oberen Rand geklatscht. Nur unter Win.

Grundsätzlich ein Kompatibilitätsproblem? Gibt es Workarounds?

Verfasst: Montag 23. März 2009, 13:57
von CM
Hm, scheint niemand zu antworten. Ich weiß auch keine Antwort, weil ich selber viel zu viele Fragen hätte. Mit wxGlade kenne ich mich nicht aus und auch sonst gibt es hier wenige Anwender - wenn überhaupt.

Was passiert denn, wenn Du ein einfaches Beispiel mit einem FlexGridSizer per Hand baust und auf beiden OS testest? Bzg. auf beiden OS die wxPython-Demo laufen läßt? Funktioniert das? Dann könnte es an wxGlade liegen. Sonst mal bei der wxMailingliste anfragen. Reinen wxPython-Code, von deinem Minimalbeispiel, kannst Du auch hier zeigen, wenn es nicht klappt - da finden wir hoffentlich den Fehler.

Gruß,
Christian

Verfasst: Mittwoch 25. März 2009, 22:48
von TiKaey
Okay, ich habe die Ursache für das verschobene aussehen gefunden.
Es liegt schlichtweg an dem 3d-Effekt des wxTextCtrl unter Windows.

Kann man den insofern unter Win im Code beeinflussen?
Also, insofern dass es vielleicht so aussieht, als sei es "tiefergelegt" aber eben gleichmäßig, nicht nur an zwei Seiten. Versteht einer was ich meine? *g*
Ganz verhindern hab ich gesehen, aber das sieht dann eher... bescheiden aus. *g*

Und irgendwie funktioniert http://www.wxpython.org/ grad nicht... *wunder*

Verfasst: Donnerstag 26. März 2009, 10:59
von CM
TiKaey hat geschrieben:Also, insofern dass es vielleicht so aussieht, als sei es "tiefergelegt" aber eben gleichmäßig, nicht nur an zwei Seiten. Versteht einer was ich meine? *g*
:-) aber lade doch mal ein Bild hoch - ein Bild sagt mehr als tausend Worte.

Schade, daß Du mit wxGlade arbeitest - bei reinem PythonCode wäre Dir viel einfacher geholfen.

Gruß,
Christian

Verfasst: Donnerstag 26. März 2009, 12:05
von TiKaey
Okay, habe dann mal 2 Screenshots angefertigt, die ich allerdings auch gewissen Gründen teilweise schwärzen musste. ;o)

Ich denke aber das, was ich meine, sollte ersichtlich sein.

Hier sehen die TextCtrl's wie gewollt aus.
Bild

Hier bewirkt der 3d-Effekt eine optische Verschiebung (Sind aber exakt übereinander, habe ein Gitter in Gimp drüber gelegt).
Bild

Warum ich wxGlade benutze:
Ich habe mal irgendwo gelesen, dass absolute Positionierung nicht so gut ist, und man mit Slidern besser 'arbeiten' kann. Jedoch wird mir vom Slidercode der Kopf wirr. *lol* Okay, vielleicht kann ich ihn irgendwie auch so schreiben, aber derzeit ist das noch nicht drinne (Bin ja nicht mehr der Jüngste *g*).
Zudem habe ich es anfangs mit direktem Schreiben vom wx-Code versucht, und irgendwie habe ich nicht alles hinbekommen (Nicht alle nötigen Infos gefunden was die Parameter angeht).

Ich hoffe mal, es gibt eine Möglichkeit, diesen Effekt anzugleichen, wenngleich ich da aber wenig Hoffnung hege. *g*

Verfasst: Donnerstag 26. März 2009, 12:34
von CM
TiKaey hat geschrieben:Okay, habe dann mal 2 Screenshots angefertigt, die ich allerdings auch gewissen Gründen teilweise schwärzen musste. ;o)
Schon klar.
TiKaey hat geschrieben:Warum ich wxGlade benutze:
Ich habe mal irgendwo gelesen, dass absolute Positionierung nicht so gut ist, und man mit Slidern besser 'arbeiten' kann. Jedoch wird mir vom Slidercode der Kopf wirr. *lol*
Ich hoffe Du meinst Sizer ;-).

Das eigentliche Problem ist: Dir gefällt das Layout von Windows nicht. Da kann man wenig machen. Was Du ggf. aber doch machen kannst, ist die Größe der oberen Widgets bestimmen und die unteren genau um den Offset kleiner machen, den Du z. B. mit Gimp bestimmst - das ergibt aber sehr unschönen Code, egal ob per Glade oder per Hand. Besser ist es noch, Du setzt die Korrektur prozentual und sorgst in einem zweiten Schritt dafür, das der Offset neu bestimmt wird, wenn der Nutzer die Fenstergröße ändert. Ziemlich umständlich und was Besseres fällt mir nicht ein.

Tut mir leid, aber vielleicht fällt anderen hier mehr ein. Gerold? ;-)

Gruß,
Christian

Verfasst: Donnerstag 26. März 2009, 13:19
von TiKaey
Ähm, ja, Sizer meinte ich. *g* Bin etwas übermüdet (Schichtdienst). ;o)

Apropos Fenstergröße verändern... kann man die eigentlich auch festlegen? oder müsste man das per Code machen (also Abfrage, wenn Größe sich verändert, neu setzen)?
Würde mich so grundsätzlich mal interessieren.

Verfasst: Donnerstag 26. März 2009, 13:30
von rabit
Die Sonne scheint von links oben, du blickst mehr von rechts unten darauf.
Die Eingabefelder liegen vertieft, die Buttons darunter stehen vor. Damit ergibt sich dieser Effekt.

Der Rahmen bei "Mountpoint" sieht aber eigenartig aus.

Verfasst: Donnerstag 26. März 2009, 13:54
von Leonidas
CM hat geschrieben:Das eigentliche Problem ist: Dir gefällt das Layout von Windows nicht. Da kann man wenig machen.
Naja. GTK+ hat einen Table-Sizer wo man Widgets in Spalten und Zeilen positionieren kann. Ich gehe stark davon aus, dass wx so etwas vergleichbares hat. Das könnte man dann verwenden um die zwei Entry-Felder, die zwei Buttons und rechts noch die RadioButtons zusammen mit der RadioGroup aufzunehmen.

Und ich würde davon abraten wx-Layout-Code selbst zu schreiben. Da ist man mit einem GUI-Designer wie XRCed oftmals besser dran. Die Layout-Datei ist ja auch Text, die kann man ebenso wie den Quelltext einfach irgendwo posten.

Edit: Sieht dann etwa so aus:
Bild

Verfasst: Donnerstag 26. März 2009, 14:58
von CM
rabit hat geschrieben:Der Rahmen bei "Mountpoint" sieht aber eigenartig aus.
Wieso, das ist ein ganz normal StaticBox mit StaticBoxSizer - nehme ich an. Im Übrigen war doch bereits klar, dass der 3D-Effekt das "Problem" ist?

@Leonidas: Klar hat wx das. Ein FlexGridSizer ist eine Möglichkeit (die wird ja auch genutzt) eine andere wäre u.U. ein GridBagSizer. TiKaey, das könntest Du natürlich auch probieren, aber das wird eher nicht so gut aussehen. Zum Positionieren dieses Sizers relativ zum Mountpoint-Widget würde ich eher einen BoxSizer nehmen.

Bzgl. händisch oder GUI-Designer: Da kann man geteilter Meinung sein. Für mich ist entscheident, das ich die Ausgaben der Designer rel. schwierig zu durchdringen finde. Und die bisherigen Antworten in der Vergangheit bei solchem Code lassen vermuten, dass es anderen ähnlich geht. Was Fragen zu wx angehet war man wohl bisher mit selbst geschriebenen Code hier besser aufgehoben. Aber das mag sich geändert haben.
Außerdem haben mich GUI-Designer mit wxPython-output bisher nicht überzeugt - auch deren Qualität mag sich geändert haben.

Gruß,
Christian

Verfasst: Donnerstag 26. März 2009, 15:52
von Leonidas
CM hat geschrieben:Bzgl. händisch oder GUI-Designer: Da kann man geteilter Meinung sein. Für mich ist entscheident, das ich die Ausgaben der Designer rel. schwierig zu durchdringen finde.
Wer sagt denn dass man sich das ansehen will? Code-generierung stinkt. Man nimmt die XRC-Dateien (das sind XML-Dateien, die will man sich nicht ansehen, weil es auch völlig egal ist was drin steht) und arbeitet mit diesen. Genauso wie eben unter Qt es die .ui-Dateien gibt und unter GTK+ .glade-Dateien. Und dieses Designer-XML kann eben im GUI-Designer geladen werden, verändert werden etc. ohne dass man eine einzige Zeile Code schreibt oder generieren muss.

Verfasst: Donnerstag 26. März 2009, 16:55
von lunar
rabit hat geschrieben:Der Rahmen bei "Mountpoint" sieht aber eigenartig aus.
Das liegt an der Hintergrundfarbe. Würde man die normale Hintergrundfarbe nutzen, sähe das besser aus.

Im Allgemeinen ist eine plattformübergreifend identische GUI eine schlechte Idee. Mit Toolkits, die native Elemente nutzen, lässt sich das sowieso nicht umsetzen. Daher sollte man sich an die Standard-Komponenten halten und von unnötigen Mätzchen wie einer eigenen Hintergrundfarbe tunlichst absehen. Dann fallen plattformspezifische Spezialitäten wie 3D-Effekte nicht negativ auf, so was bei der gezeigten GUI der Fall ist.

Verfasst: Donnerstag 26. März 2009, 19:36
von TiKaey
Okay, ich werde mir überlegen, wie ich weiter vorgehe.

Danke. :o)