einstelle Ich schreibe ein Skript, um Dinge in ein Fenster auszugeben, das ein Tkhtml-Widget und ein Text-Widget enthält, die übereinander in einem ttk :: panedwindow angezeigt werden. Beide Widgets können vertikal und horizontal gescrollt werden. Es gibt auch eine Schaltfläche, mit der der Benutzer das Text-Widget löschen kann.Wann und wie man die Fenstergröße mit Tk
Ich mache einige der Entwicklung auf einem Laptop mit Ubuntu. Der Fenstermanager erlaubt vier Desktop-Arbeitsbereiche in einem 2x2-Array, und wenn die GUI zum ersten Mal angezeigt wird, blutet der untere fünfte von dem Arbeitsbereich, den ich benutze, in den unteren. Es ist ärgerlich, wenn ich die Größe des Fensters verkleinern muss, um es so kurz zu machen, dass es auf den Bildschirm passt, damit ich die Größe ändern kann.
(glaube ich) Ich weiß ungefähr, wie dies zu tun, d. H. An ein entsprechendes Ereignis binden, so dass ich ein Skript ausführen kann, wenn das Fenster zum ersten Mal angezeigt wird. (Setzen Sie die Bindung innerhalb des Skripts zurück, so dass sie nur einmal ausgelöst wird.) Ich glaubte, dass das "passende Ereignis" <Map>
war, aber als das Fenster zum ersten Mal zugeordnet wurde, hatten die beiden Widgets keine Höhe (wie von [winfo height]
gemeldet). Ich versuchte, an <Expose>
zu binden, und das scheint zu funktionieren, ([winfo height]
gibt vernünftige Zahlen zurück,) also:
Frage 1: Welches Ereignis sollte ich binden?
Wenn die Bindung Feuer, berichtet [wm geometry]
die Geometrie als 815x1029 + 49 + 24, [winfo height]
berichtet, die beiden Höhen der beiden Widgets wie 600 und 366, und [wm screenheight]
gibt eine Höhe von 800. Ich weiß, gibt es verschiedene andere Bits und Stücke in der GUI, so bin ich nicht überrascht, dass 63 Pixel im ursprünglichen Layout nicht berücksichtigt werden. Ich nehme an, dass ich nach der Größenanpassung die gleiche Menge an Platz benötige, also sollte ich eine Geometrie von 815x737 + 49 + 24 anfordern, aber wenn ich das tue, blutet ein Band (ungefähr die untere horizontale Bildlaufleiste) immer noch auf den nächsten Arbeitsbereich.
Indem ich manuell mucke, weiß ich, dass, wenn alles gut auf dem Bildschirm passt, die Geometrie 815x717 + 49 + 24 sein sollte, also habe ich einen Fudge-Faktor von 20 zu dem Raum hinzugefügt, den ich für den "anderen" erlaube Bits und Stücke der GUI ". Dies funktioniert gut, aber scheint ein wenig unelegant (massive britische Untertreibung :-)), also:
Frage 2: Was habe ich verpasst, die Verwendung eines Fudge-Faktor?
Ich benutze Tk 8.6.1 auf Ubuntu 12.04.5 LTS. Ich verwende die Version 0.9.7.12 des Compiz-Fenstermanagers.
aktualisieren
Es fiel mir auf, dass ich sollte die Höhe der verschiedenen Scheiben, anstatt die Tkhtml und Text-Widgets wie das würde erklären die Bildlaufleisten und die Schaltfläche „Löschen“ finden. Die Fensterhöhen sind anfänglich 615 und 409, aber das bedeutet nur, dass ich meinen Fudge-Faktor von 20 auf 78 erhöhen muss, um die Anforderungshöhe auf den gewünschten Wert von 717 zu bringen. Gibt es eine Möglichkeit, vorherzusagen, welche Höhe für den Toplevel erforderlich ist enthält mein Fenster, um das Toplevel auf den Bildschirm zu bringen?
'winfo Höhe' wird keine sinnvollen Zahlen zurückgeben, bis das Fenster vollständig angezeigt wird. Sie können 'winfo reqheight' verwenden, um die angeforderte Höhe des Fensters zu erhalten, bevor das Fenster angezeigt wird. –
@BradLanam Ich erwartete, dass das '
@BradLanam '[winfo reqheight]' gibt nichts hilfreiches zurück, da ich keine bestimmten Höhen anfordere. – nurdglaw