Hallo zusammen, ich habe unter Windows eine Systemnschriftgröße von 96 ppi eingestellt, eine Oberfläche programmiert und alles sieht super aus,
ein anderer Benutzer hat dummerweise 125% (= 120ppi) eingestellt, daher ist die Schrift in Relation zu den Widgets zu groß. Wie kann ich da eine skalierung einbauen??
edit:
ich meine ich brauche eine Abfrage ob in Win LargeFonts eingestellt ist, wenn ja, muß ich meine Schriftgrößen mit (96/120) verkleinern oder?
Fontgröße anpassen
- Rebecca
- User
- Beiträge: 1662
- Registriert: Freitag 3. Februar 2006, 12:28
- Wohnort: DN, Heimat: HB
- Kontaktdaten:
Nein, umgekehrt wird ein Schuh draus: Du solltest deine GUI flexibel gestalten, sodass sie sich der Schriftgroesse anpassen kann. Benutze grundsaetzlich Layoutmanager, und verzichte auf explizite Groessen- und Positonsangaben.
Wenn ein Benutzer eine grosse Schrift haben will, so sollte man das respektieren. Manche Leute koennen z.B. kleine Schriften nicht lesen, und generell ist es fuer den Benutzer schoener, wenn alles einheitlich ist.
Wenn ein Benutzer eine grosse Schrift haben will, so sollte man das respektieren. Manche Leute koennen z.B. kleine Schriften nicht lesen, und generell ist es fuer den Benutzer schoener, wenn alles einheitlich ist.
Offizielles Python-Tutorial (Deutsche Version)
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
in meinem Fall ist es so, dass die Schrift so groß wird, dass sie sich mit Widgets überschneidet. Wie kann ich dass verhindern? Das geht doch nur über die Frage, wie groß ist die Schrift und wie groß ist das Widget....oder?
Gibt es die Möglichkeit, den ppi - Wert von Windows auszulesen??
Gibt es die Möglichkeit, den ppi - Wert von Windows auszulesen??
- Rebecca
- User
- Beiträge: 1662
- Registriert: Freitag 3. Februar 2006, 12:28
- Wohnort: DN, Heimat: HB
- Kontaktdaten:
Natuerlich braucht man bei grosser Schrift ingesamt mehr Platz, um alle Widgets komplett darzustellen, dh. der Nutzer muss das Fenster groesser machen, und du solltest mittels der Layoutmanager (Sizer) dafuer sorgen, dass sich die Widgets dann auch ausdehnen.
Schrift hast du doch auch nur im Zusammenhang mit einem Widget, sei es nun ein TextCtrl oder ein Button...
Wahrscheinlich ist es am einfachsten, wenn du mal ein kurzes Beispiel postest, bei dem das Problem aufgritt. Normalerweise besteht kein Grund, irgendwelche Laengen- und Groessenangaben zu benutzen oder auszurechnen.
dass die Schrift so groß wird, dass sie sich mit Widgets überschneidet.

Wahrscheinlich ist es am einfachsten, wenn du mal ein kurzes Beispiel postest, bei dem das Problem aufgritt. Normalerweise besteht kein Grund, irgendwelche Laengen- und Groessenangaben zu benutzen oder auszurechnen.
Offizielles Python-Tutorial (Deutsche Version)
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
hmmm, wenn ich mir es recht überlege....
stimmt, eigentlich habe ich gar kein Problem, wenn der Nutzer so große Schriftarten verwendet, muß er auch das Fenster groß ziehen...
Also Danke für die Hilfestellung, ich muß jetzt beim Anwender Überzeugungsarbeit leisten.
stimmt, eigentlich habe ich gar kein Problem, wenn der Nutzer so große Schriftarten verwendet, muß er auch das Fenster groß ziehen...
Also Danke für die Hilfestellung, ich muß jetzt beim Anwender Überzeugungsarbeit leisten.
Hat wx denn keine Möglichkeit, die minimal erforderliche Größe eines Layouts zu bestimmen? Denn dann wäre die offensichtliche Lösung ja, dass Fenster beim initialen Start der Anwendung auf die minimal erforderliche Größe auszudehnen.
dafür müßte man die verwendete Schriftgröße kennen, denn die Framegröße ist davon abhängig.
Würde ich wissen ob 120 ppi oder 96 ppi verwendet werden, könnte ich mit size bzw. SetSizeHints() die Framegröße anpassen und alles wäre gut...
im Moment wird die Framegröße ausschließlich nach der Displaygröße ausgerichtet
Würde ich wissen ob 120 ppi oder 96 ppi verwendet werden, könnte ich mit size bzw. SetSizeHints() die Framegröße anpassen und alles wäre gut...
im Moment wird die Framegröße ausschließlich nach der Displaygröße ausgerichtet
@mathi: Unsinn. Wieso glaubst Du immer, dass Du selbst mit Schriftgrößen rumrechnen müsstest? Es ist Aufgabe und Zweck eines Toolkits, genau von diesen Kleinigkeiten zu abstrahieren. Layouts und Widgets eines Toolkits müssen ihre erforderliche Größe selbst berechnen können.
Ich kenne mich mit Wx nicht aus, aber in Qt reicht ein einfaches "layout.minimumSize()", um die nötige Größe eines Layouts zu ermitteln. Ganz ohne, dass man sich über DPI und Schriftgrößen Gedanken machen müsste. Irgendwie habe ich das Gefühl, dass Du Layoutverwaltung nicht ganz verstanden hast.
Ich kenne mich mit Wx nicht aus, aber in Qt reicht ein einfaches "layout.minimumSize()", um die nötige Größe eines Layouts zu ermitteln. Ganz ohne, dass man sich über DPI und Schriftgrößen Gedanken machen müsste. Irgendwie habe ich das Gefühl, dass Du Layoutverwaltung nicht ganz verstanden hast.
http://paste.pocoo.org/show/Bb7yHdrluuuVoHcapnZK/
also hier mal ein Beispiel, mit
habe ich mal simuliert was passiert, wenn der Nutzer 120ppi hat.
die Schrift ist einfach viel zu groß, wie soll der Layoutmanager wissen, wie ich mir die Proportionen vorstelle???
P.S. : die Überschneidungen sind weitestgehend weg, weil ich die Abstände schon optimiert habe...
also hier mal ein Beispiel, mit
Code: Alles auswählen
font = wx.Font(13, wx.NORMAL, wx.NORMAL, wx.BOLD)
font2 = wx.Font(11, wx.NORMAL, wx.NORMAL, wx.NORMAL)
die Schrift ist einfach viel zu groß, wie soll der Layoutmanager wissen, wie ich mir die Proportionen vorstelle???
P.S. : die Überschneidungen sind weitestgehend weg, weil ich die Abstände schon optimiert habe...
@mathi: `LayoutConstraints` sollten nicht mehr verwendet werden, die sind veraltet. Wie Rebecca schrieb: Verwende `Sizer`.
Aus der wxWidgets-Doku: `Note: constraints are now deprecated and you should use sizers instead.`
Aus der wxWidgets-Doku: `Note: constraints are now deprecated and you should use sizers instead.`
ok, ich habe das ganze mal umgebaut:
http://paste.pocoo.org/show/xhWGhqvQuEviLHCNojlw/
leider habe ich Probleme mit
- den Anfangsgrößen der Button und die Button sind statisch (nicht mit der Panelgröße skalierend) ,
- die Linien sind statisch
- den Rahmen um das Bild kann ich gar nicht erstellen, erst recht nicht dynamisch (mit der Panelgröße skalierend)
- ich habe keine Ahnung wie ich da auch noch ein Bild in den Rahmen bekomme....
links wie es jetzt ist, rechts wie es sein soll

Der erste Schritt wäre doch, das das Grid expandieren kann und sich die Widgets an der Gridgröße orientieren ?
Im Moment ist es doch aber so, dass sich das Gris an der Größe der Widgets orientiert....
http://paste.pocoo.org/show/xhWGhqvQuEviLHCNojlw/
leider habe ich Probleme mit
- den Anfangsgrößen der Button und die Button sind statisch (nicht mit der Panelgröße skalierend) ,
- die Linien sind statisch
- den Rahmen um das Bild kann ich gar nicht erstellen, erst recht nicht dynamisch (mit der Panelgröße skalierend)
- ich habe keine Ahnung wie ich da auch noch ein Bild in den Rahmen bekomme....
links wie es jetzt ist, rechts wie es sein soll

Der erste Schritt wäre doch, das das Grid expandieren kann und sich die Widgets an der Gridgröße orientieren ?
Im Moment ist es doch aber so, dass sich das Gris an der Größe der Widgets orientiert....

Im linken Bild stimmt vom UI eigentlich alles, ausser dass der Textrahmen nicht die zur Verfügung stehende Höhe ausfüllt - das sollte behebbbar sein (Stichwort wx.EXPAND und/oder proportion-Keyword in der Add-Methode, falls BoxSizer verwendet werden). Und die Framegröße könnte man noch mit Fit() anpassen, damit das Frame nicht größer als nötig ist.
Jetzt noch eine Frage, die eher Richtung UI-Design/UI-Standards geht: Warum willst Du es wie im rechten Bild? Dort sind die Buttons höher als üblich, und ich persönlich halte in der Regel nichts davon, die UI-Vorgaben des jeweiligen OS zu brechen (was unter Windows und auch Linux leider häufig geschieht, Apple hat das Problem mit seinen umfangreichen Design Guidelines etwas weniger imho), es sei denn man hat einen verdammt guten Grund
Jetzt noch eine Frage, die eher Richtung UI-Design/UI-Standards geht: Warum willst Du es wie im rechten Bild? Dort sind die Buttons höher als üblich, und ich persönlich halte in der Regel nichts davon, die UI-Vorgaben des jeweiligen OS zu brechen (was unter Windows und auch Linux leider häufig geschieht, Apple hat das Problem mit seinen umfangreichen Design Guidelines etwas weniger imho), es sei denn man hat einen verdammt guten Grund

-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Also ich kenne/nutze zumindest keine GTK-Applikation die das tut. Unter Qt halte ich das ebenfalls für eine Seltenheit.fhoech hat geschrieben:(was unter Windows und auch Linux leider häufig geschieht, Apple hat das Problem mit seinen umfangreichen Design Guidelines etwas weniger imho)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
um das Thema abzuschließen, ich habe Euren Rat befolgt und die Buttons nicht vergrößert. Ansonsten konnte ich mit wx.StaticBox in einem wx.StaticBoxSizer die Box in Größe und Position richtig einbauen.
Darin war dann auch das .jpg möglich.
Der Tip mit Fit() war auchnützlich...
Danke an alle für die Hilfe, bis zur nächsten Frage
Darin war dann auch das .jpg möglich.
Der Tip mit Fit() war auchnützlich...
Danke an alle für die Hilfe, bis zur nächsten Frage
