Gtk+ - Widgets positionieren
-
hallo,
ich hab gerade angefangen mit gtk+, und ich wollte man nachfragen, wie ich widgets (mit x und y koordinate) positionieren kann.
wenn ich z. b. ein label erstelle, dann wird das in der mitte des fensters dargestellt.
wie kann ich das ändern?
-
????? schrieb:
hallo,
ich hab gerade angefangen mit gtk+, und ich wollte man nachfragen, wie ich widgets (mit x und y koordinate) positionieren kann.
wenn ich z. b. ein label erstelle, dann wird das in der mitte des fensters dargestellt.
wie kann ich das ändern?
Das macht man mit GtkFixed. Nur so nebenbei: das ist in GTK+ eher unüblich und nur für spezielle Anwendungen sinnvoll. In GTK+ arbeitet man eher mit Containern wie GtkVBox, GtkHBox resp. GtkTable um Fensterinhalte zu positionieren.
-
ok, danke.
ist GtkFixed bestandteil der gtk3-entwicklerbibliothek?
und nochwas:
ich würde gerne "resizable" deaktivieren. dazu hab ich das geschrieben:// "window" ist das hauptfenster gtk_window_set_resizable(GTK_WINDOW(window),FALSE);
das funktioniert aber nicht richtig! ich hab davor die default-größe des fensters bestimmt, aber wenn ich das dazuschreib, dann wird das fenster bei programmstart auf punktgröße verkleinert!
-
p.s.:
wie genau geht das mit den boxen?
-
GTK 3:
http://de.wikibooks.org/wiki/GTK_mit_Builder:_Layout
http://developer.gnome.org/gtk3/3.0/
Normal müsste gtk_window_set_resizable auch in GTK+ 3 funktionieren - zeige mal Deinen Code.....
-
ich programmiere eigentlich unter linux, hab jetzt aber gerade windows laufen, und hab keine lust den computer hoch und runter zu fahren.
ich schreib das jetzt mal aus meinem gedächtnis hier hin:#include <gtk/gtk.h> int main(int argc, char *argv[]) { GtkWidget *window1; gtk_init(&argc, &argv); window1=gtk_new_window(GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size(GTK_WINDOW(window1),400,200); gtk_window_set_resizable(GTK_WINDOW(window1),FALSE); g_signal_connect(G_OBJECT(window1),"destroy",G_CALLBACK(gtk_quit_main),NULL); gtk_widget_show_all(window1); gtk_main(); return 0; }
die "störzeile" ist zeile 9.
wenn ich das jetzt genauso kompiliere wie es hier steht und dann das programm starte, wird das fenster sehr klein gemacht (man sieht es fast nicht).
wenn ich das ohne zeile 9 kompiliere, dann geht alles, aber das fenster lässt sich dann auch vergrößern (was ich ja vermeiden will).
-
????? schrieb:
ich programmiere eigentlich unter linux, hab jetzt aber gerade windows laufen, und hab keine lust den computer hoch und runter zu fahren.
ich schreib das jetzt mal aus meinem gedächtnis hier hin:Und ich soll Lust haben Deine Gedächtnisfehler zu suchen??
#include <gtk/gtk.h> int main(int argc, char *argv[]) { GtkWidget *window1; gtk_init(&argc, &argv); // window1=gtk_new_window(GTK_WINDOW_TOPLEVEL); window1=gtk_window_new(GTK_WINDOW_TOPLEVEL); // gtk_window_set_default_size(GTK_WINDOW(window1),400,200); gtk_widget_set_size_request (window1, 400, 200); gtk_window_set_resizable(GTK_WINDOW(window1),FALSE); // g_signal_connect(G_OBJECT(window1),"destroy",G_CALLBACK(gtk_quit_main),NULL); g_signal_connect(G_OBJECT(window1),"destroy",G_CALLBACK(gtk_main_quit),NULL); gtk_widget_show_all(window1); gtk_main(); return 0; }
Jetzt lies mal die verlinkte Doku - dort ist auch das Layoutmanagement erklart...
-
vielen dank.
-
"gtk_widget_set_size_request (window1, 400, 200); "
funktioniert nicht!
fehlermeldung: "undefined reference to `gtk_set_size_request'"bist du sicher, dass das auch in gtk 3 geht?
-
entschuldigung, hab mich vertippt, es geht doch (hab statt "widget" window geschrieben.)
vielen dank.