2017-09-21 13 views
1

GTKアプリの左側にタブを作ってみましょう。GTK +ノートブックのタブバーのサイズを変更するには

enter image description here

しかし、私はノートブックウィジェットのサイズ変更オプションを見つけることができませんでした。そして、私はこのようなサイズ変更可能なタブ・バーエリアを取得したいです。

誰かが私がGLadeでこれをやり遂げる方法を知っていますか?

+1

我々はまだありません(あなたが入社した1年前とは異なります)。 – Olaf

+1

gtk_widget_set_size_request()を参照してください:https://developer.gnome.org/gtk3/stable/GtkWidget.html#gtk-widget-set-size-request gtk +/glibでGtkNoteBookはGtkWidgetから派生しています。実装されているか、gtkwidgetから派生しています。 – hetepeperfan

答えて

1

GtkNotebookのタブ領域は、サイズ変更ができません。しかし、回避策があります。解決策は、GtkNotebookからタブを削除し、ボタン付きのタブバーをシミュレートすることです。このようにして、GtkPaned内でそれらを分離し、それらを含むことができます。

myui.glade命名)このアプローチ以下のような簡単な空き地のファイル:

<?xml version="1.0" encoding="UTF-8"?> 
<!-- Generated with glade 3.19.0 --> 
<interface> 
    <requires lib="gtk+" version="3.16"/> 
    <object class="GtkWindow" id="window1"> 
    <property name="can_focus">False</property> 
    <property name="default_width">440</property> 
    <property name="default_height">250</property> 
    <child> 
     <object class="GtkPaned" id="paned1"> 
     <property name="visible">True</property> 
     <property name="can_focus">True</property> 
     <child> 
      <object class="GtkBox" id="box1"> 
      <property name="visible">True</property> 
      <property name="can_focus">False</property> 
      <property name="orientation">vertical</property> 
      <child> 
       <object class="GtkButton" id="page1"> 
       <property name="label" translatable="yes">Page 1</property> 
       <property name="visible">True</property> 
       <property name="can_focus">True</property> 
       <property name="receives_default">True</property> 
       </object> 
       <packing> 
       <property name="expand">False</property> 
       <property name="fill">True</property> 
       <property name="position">0</property> 
       </packing> 
      </child> 
      <child> 
       <object class="GtkButton" id="page2"> 
       <property name="label" translatable="yes">Page 2</property> 
       <property name="visible">True</property> 
       <property name="can_focus">True</property> 
       <property name="receives_default">True</property> 
       </object> 
       <packing> 
       <property name="expand">False</property> 
       <property name="fill">True</property> 
       <property name="position">1</property> 
       </packing> 
      </child> 
      <child> 
       <object class="GtkButton" id="page3"> 
       <property name="label" translatable="yes">Page 3</property> 
       <property name="visible">True</property> 
       <property name="can_focus">True</property> 
       <property name="receives_default">True</property> 
       </object> 
       <packing> 
       <property name="expand">False</property> 
       <property name="fill">True</property> 
       <property name="position">2</property> 
       </packing> 
      </child> 
      </object> 
      <packing> 
      <property name="resize">False</property> 
      <property name="shrink">True</property> 
      </packing> 
     </child> 
     <child> 
      <object class="GtkNotebook" id="notebook1"> 
      <property name="visible">True</property> 
      <property name="can_focus">True</property> 
      <property name="show_tabs">False</property> 
      <child> 
       <object class="GtkLabel" id="label4"> 
       <property name="visible">True</property> 
       <property name="can_focus">False</property> 
       <property name="label" translatable="yes">This is Page 1</property> 
       </object> 
      </child> 
      <child type="tab"> 
       <object class="GtkLabel" id="label1"> 
       <property name="visible">True</property> 
       <property name="can_focus">False</property> 
       <property name="label" translatable="yes">page 1</property> 
       </object> 
       <packing> 
       <property name="tab_fill">False</property> 
       </packing> 
      </child> 
      <child> 
       <object class="GtkLabel" id="label6"> 
       <property name="visible">True</property> 
       <property name="can_focus">False</property> 
       <property name="label" translatable="yes">This is Page 2</property> 
       </object> 
       <packing> 
       <property name="position">1</property> 
       </packing> 
      </child> 
      <child type="tab"> 
       <object class="GtkLabel" id="label2"> 
       <property name="visible">True</property> 
       <property name="can_focus">False</property> 
       <property name="label" translatable="yes">page 2</property> 
       </object> 
       <packing> 
       <property name="position">1</property> 
       <property name="tab_fill">False</property> 
       </packing> 
      </child> 
      <child> 
       <object class="GtkLabel" id="label5"> 
       <property name="visible">True</property> 
       <property name="can_focus">False</property> 
       <property name="label" translatable="yes">This is Page 3</property> 
       </object> 
       <packing> 
       <property name="position">2</property> 
       </packing> 
      </child> 
      <child type="tab"> 
       <object class="GtkLabel" id="label3"> 
       <property name="visible">True</property> 
       <property name="can_focus">False</property> 
       <property name="label" translatable="yes">page 3</property> 
       </object> 
       <packing> 
       <property name="position">2</property> 
       <property name="tab_fill">False</property> 
       </packing> 
      </child> 
      </object> 
      <packing> 
      <property name="resize">True</property> 
      <property name="shrink">True</property> 
      </packing> 
     </child> 
     </object> 
    </child> 
    </object> 
</interface> 

我々は、ボタンのクリックを処理し、対応するページに切り替える必要がありますGtkNotebookページを切り替えます。

行動のためのシンプルな実装が(main.c命名)することができます。

#include <gtk/gtk.h> 

void on_page1_button_clicked (GtkButton *button, gpointer user_data) { 
    GtkNotebook *notebook = GTK_NOTEBOOK(user_data); 
    gtk_notebook_set_current_page(notebook, 0); 
} 

void on_page2_button_clicked (GtkButton *button, gpointer user_data) { 
    GtkNotebook *notebook = GTK_NOTEBOOK(user_data); 
    gtk_notebook_set_current_page(notebook, 1); 
} 

void on_page3_button_clicked (GtkButton *button, gpointer user_data) { 
    GtkNotebook *notebook = GTK_NOTEBOOK(user_data); 
    gtk_notebook_set_current_page(notebook, 2); 
} 


int main(int argc, char *argv[]) { 
    GtkWidget *page1; 
    GtkWidget *page2; 
    GtkWidget *page3; 
    GtkWidget *window; 
    GtkWidget *notebook; 
    GtkBuilder *builder; 

    gtk_init (&argc,&argv); 

    builder = gtk_builder_new_from_file("myui.glade"); 

    page1 = GTK_WIDGET(gtk_builder_get_object(builder, "page1")); 
    page2 = GTK_WIDGET(gtk_builder_get_object(builder, "page2")); 
    page3 = GTK_WIDGET(gtk_builder_get_object(builder, "page3")); 
    window = GTK_WIDGET(gtk_builder_get_object(builder, "window1")); 
    notebook = GTK_WIDGET(gtk_builder_get_object(builder, "notebook1")); 

    g_signal_connect (page1, "clicked", G_CALLBACK(on_page1_button_clicked), notebook); 
    g_signal_connect (page2, "clicked", G_CALLBACK(on_page2_button_clicked), notebook); 
    g_signal_connect (page3, "clicked", G_CALLBACK(on_page3_button_clicked), notebook); 

    g_signal_connect (window, "destroy", G_CALLBACK(gtk_main_quit), NULL); 

    gtk_widget_show_all(GTK_WIDGET(window)); 

    gtk_main(); 

    return 0; 
} 

コンパイルと:

gcc -o notebook main.c `pkg-config --cflags --libs gtk+-3.0` 

結果:

enter image description here

+0

曖昧さのない回答をありがとう! 見た目は悪くありません。それは私の解決策かもしれない... – Lory

関連する問題