2011-01-26 14 views
4

まあ、私はGTKでやっている小さなインターフェースに問題があります。GTKウィジェットをC言語のvboxにリサイズする

私はいくつかのウィジェットを、正確に3つのウィジェットにして、それらをgtk_box_pack_startというvboxに入れました。 私はgtk_widget_set_size_request関数でこれらのウィジェットのサイズを変更しましたが、ウィジェットはvboxの全幅に拡張され、関数内で修正されたサイズを尊重しないので有効ではないようです。

これは作るコードの一部:

enter = gtk_button_new(); 
gtk_button_set_image(GTK_BUTTON(enter), gtk_image_new_from_file("iconos/submit.png")); 
gtk_widget_set_size_request(enter, 195, 32); 

//User,pass 
login->user = gtk_entry_new(); 
login->passwd = gtk_entry_new(); 
gtk_widget_set_size_request(login->user, 195, 32); 
gtk_widget_set_size_request(login->passwd, 195, 32); 

gtk_box_pack_start(GTK_BOX(v_box), login->user, FALSE, FALSE, 10); 
gtk_box_pack_start(GTK_BOX(v_box), login->passwd, FALSE, FALSE, 0); 
gtk_box_pack_start(GTK_BOX(v_box), enter, FALSE, FALSE, 10); 

gtk_container_add(GTK_CONTAINER(window), v_box); 

私が整列するように、これらのウィジェットを置けば、私は何の問題もない、サイズは右固定されています。

これはなぜですか?

答えて

2

サイズを設定して何を達成したいですか? gtk_widget_set_size_request()のドキュメントは、

注任意の固定サイズの設定の固有の危険性を言うように - テーマ、他の言語への翻訳、異なるフォント、およびユーザーアクションはすべて与えられたウィジェットの適切なサイズを変更することができます。したがって、常に正しいサイズのハードコードは基本的に不可能です。

あなたは、ウィジェットのサイズ要求を設定することができますが、それはサイズを設定することと同じではありません。私たちはいつも私たちが望むものを得ることができないので、ウィジェットは要求するサイズを取得しないことがあります。これらのケースの1つです。

GTKは、実際にはウィジェットの固定サイズを設定する必要がないように設計されています。 (ドキュメントの上の引用符を参照してください)通常、あなたが望むものを達成するためのよりよい方法があります。この場合

gtk_container_addGtkHButtonBoxであなたのボタンを入れて、あなたが前にやっていたとして、FALSEに設定expandfillパラメータを使用して、あなたの垂直ボックスにボタンボックスを詰めます。

+0

こんにちは、私の遅い答えを申し訳ありません。基本的には、ウィジェットがgtk_alignmentに入っている場合、私はこのウィジェットのサイズを私が望むサイズに変更できますが、gtk_alignmentの外にある場合(例えばvertical_boxの場合)、gtk_widget_set_size_requestは何の効果もありません。 これを正しく説明してもわかりません。申し訳ありません。 – Leber

+0

@Leber、私はあなたが文字通りウィジェットのコンテナとサイズの要求を何とかしようとしているのではない - 私は元の質問からそれを得た。私はあなたのデザインのどの部分にハードコードされたサイズを設定する必要があるのか​​を尋ねています。 GTKは、通常、ウィジェットのサイズをハードコードする必要がないように設計されているため、VBoxがサイズ要求をオーバーライドすることができます。だからあなたが作成しようとしている効果を言うならば、StackOverflowの人々はあなたがそれを行うのを手助けすることができます。確かにあなたが遅れているとは思わない。 – ptomato

+0

元気ですか?私はこれをより良く説明しようとします。私はVBoxにボタンがあり、このボタンが特定のサイズ、例えば150x50を持っていることを望みます。私はgtk_widget_set_size_requestで試してみましたが、これはうまくいきません。たぶん私はこの機能の機能を理解していないかもしれません。私の英語のために申し訳ありません。詳細が必要な場合は、私に尋ねてください。ありがとう – Leber

関連する問題