Warum ruft set_size_request (800,600) DrawingArea widget (auch getestet mit Gtk.Button) in einem Fenster der Größe 958 x 791 px, während set_default_size (800,600) für das Fenster in einem entsprechend großen Fenster (wie gemessen mit einen Screenshot von nur dem Fenster zu machen und seine Auflösung zu betrachten)? Ich würde verstehen, wenn es wegen der Fenster-Header-Leiste eine kleine Diskrepanz in der Höhe geben würde, aber solch ein Unterschied in der Breite und Höhe macht keinen Sinn für mich. Die Dokumentation deutet nichts dergleichen an. Wenn mich jemand aufklären könnte, wäre das großartig!Warum ergeben Gtk.Widget.set_size_request und Gtk.Window.set_default_size unterschiedliche Fenstergrößen mit gleichen Werten?
Hier ist ein Codebeispiel in Vala geschrieben:
using Gtk;
using Cairo;
public class SizeTest : Gtk.Window {
public SizeTest() {
this.title = "Size test";
this.destroy.connect (Gtk.main_quit);
//set_default_size (800, 600); // Window size -> 800 x 600 px
var drawing_area = new DrawingArea();
drawing_area.set_size_request (800, 600); // Window size -> 958 x 791 px
add (drawing_area);
}
static int main (string[] args) {
Gtk.init (ref args);
var test = new SizeTest();
test.show_all();
Gtk.main();
return 0;
}
}
@Zongren Zhang, wir danken Ihnen für sie zu testen. Ich habe es erneut versucht und es in zwei Anwendungen aufgeteilt, wie Sie es getan haben. Die Größe beider Fenster ist für mich ziemlich unterschiedlich. Ich habe es auf meinen beiden Monitoren versucht - das gleiche.
Btw, ich benutze elementare OS 0.4.1 Loki, installiert libgtk-3-0-Version ist 3.18.9.
AFAIK Gtk machen keine Versprechungen über eine Anfangsgröße der Fenster; Wenn Sie keine Anfangsgröße oder Geometrietipps festlegen, kann die Anfangsgröße beliebig sein. Es hängt wahrscheinlich von Ihrem Fenstermanager ab. –
Aber was verwirrt mich am meisten ist, dass 800x600 px (was tatsächliche physische Pixel auf dem Bildschirm ist, richtig ?!) scheint etwas anders als das Fenster als in der DrawingArea. Wenn es als Standardgröße des Fensters eingestellt ist, hat ein Screenshot davon genau diese Auflösung. Wenn ich es andererseits als die Größe des DrawingArea einstelle, wird ein Quadrat, das 799,599 gezeichnet wird, gerade in der unteren rechten Ecke sichtbar, während ein Objekt bei 0,0 in der oberen linken Ecke liegt. Die Fenstergröße passt sich natürlich an, um die DrawingArea aufzunehmen, aber das Fenster ist jetzt mehr als 150 px in beiden Richtungen größer. – Heiko
@Rawing Ich denke, ich habe es herausgefunden! Du hattest recht, wenn du die Standardgröße eines Fensters einstellst, ist das keine Garantie dafür, dass es wirklich mit dieser Größe auftaucht. Danke für den Hinweis! Obwohl verschiedene Standardfenstergrößen zu unterschiedlichen tatsächlichen Größen führen, habe ich mich täuschen lassen. Es war nie die richtige Größe. Das Screenshot Tool hat mich noch weiter getäuscht; D. Als ich die Screenshots in Gimp öffnete, erkannte ich, dass um das Fenster herum ein transparenter Raum ist. Es muss irgendwie diese Standardgröße holen, einen Screenshot des Fensters machen und dann den Raum machen, der dem Fenster zugewiesen wurde, aber nicht transparent verwendet wird. – Heiko