2017-08-05 11 views
2

私はユニークな問題があると思います。gtk/glade拡張ツールバー

私はラベル、ボタン、および他のgtkウィジェットを保持できるウィジェットのような水平のツールバーを作成しようとしています。できるだけ多くの情報をまとめたいと思っていますが、さまざまな画面サイズで動作する必要があります。

最終的に私は小さな画面でGUIを実行することを期待しているので、使用したいウィジェットのほとんどは、あまりにも多くのスペースを一緒に取るため実際にはフィットできません。

しかし、私はそれらをユーザーが利用できるようにしたいので、2〜3行のウィジェットを持つことができると考えました。最も使用されているものを一番上に置きます。

最終的には、ユーザーが望むものに応じて実行時に別のウィジェットを追加できるようにしたいと思います(たとえば、Windowsエクスプローラのファイルリスト)。

ここで、一部のウィジェットが利用可能で、一部のサイズが固定されている場合は、多くのスペースを使いたいと思っています。この方法では、スペースが最適に使用されます。大型の液晶モニタでアプリを実行している場合は、より多くのウィジェットをパックすることができ、そうでない場合は削除することができます。

基本的には、フロー制御のようなものですが、それとは異なります。私は水平のボックスを使用していましたが、これの限界を素早く認識しました。主に、私は小さなウィンドウに収まるようにアプリケーションを大きくするかもしれない総幅よりも私のウィンドウのサイズを小さくできませんでした。

私はプログラムに隙間を再実装したくないので、作業量を最小限に抑えようとしています。 OTH、私は別のデバイスのための異なる隙間のインターフェイスを作成することができると思います...おそらく最も簡単なことです。ユーザーが実際にインターフェイスをカスタマイズしたい場合は、手動で行うことができます。私はウィジェットとそのすべてが欠落していることを心配しなければならないので、余計なプログラミング作業が必要ですが、心配する必要はありません。

私はむしろより有用な方法を持っています。何か案は?

私の「ツールバー」を構成するウィジェットは、イメージ、ボタン、ラベル、描画領域、および他のいくつかの標準gtkウィジェットです。できるだけ多くの水平方向のスペースを取る必要があり、他のサイズは固定されます。すべてが同じ垂直サイズになります。

一部の要素は、右端や左端などの固定位置を持ち、変更されません。私はおそらく

X Y Z * * * * A B C 
* * * * * * * * * * 

もう少し明確にする必要があり

XYZとABCが現れると遠左右RESPにしなければならないのウィジェットを固定しようとしています。

  • は設定可能にする必要があります。いくつかは、彼らができる最大サイズを使用して展開する必要がある(とも展開する必要がある他のユーザーと共有)、一部は固定されますされます。最終的にはユーザーの追加や削除*ウィジェットを問題なく、彼らがしたい場合は、それらを並べ替えることができるはずです。彼らは、X、Y、Z及びB Cウィジェットを常に表示されるように、それらは流下べき多くに加えます。
+1

あなたは[ToolPalette](https://developer.gnome.org/gtk3/stable/GtkToolPalette.html)について知っていますか? – theGtknerd

答えて

1

わからないあなたの目標についてが、あなたの図面、アプローチに似た何かを得るために、だろうが、GtkGrid/Gtk.GridまたはGtkBox/Gtk.Boxに詰め、いくつかのGtkToolbar/Gtk.Toolbarを使用します。

最初と最後のツールバーのshow_arrowプロパティはFalseに設定され、中間のツールバーはTrueに設定されます。

このような設定では、中央のツールバーが縮小され、ユーザーがパックウィジェットを選択できるように矢印が表示されます。

GtkToolbar/Gtk.Toolbarではすべての種類のウィジェットをカスタムのものでも使用できます。ここで

は簡単な例です:

<?xml version="1.0" encoding="UTF-8"?> 
<!-- Generated with glade 3.20.0 --> 
<interface> 
    <requires lib="gtk+" version="3.20"/> 
    <object class="GtkWindow"> 
    <property name="can_focus">False</property> 
    <child> 
     <object class="GtkBox"> 
     <property name="visible">True</property> 
     <property name="can_focus">False</property> 
     <property name="orientation">vertical</property> 
     <child> 
      <object class="GtkBox"> 
      <property name="visible">True</property> 
      <property name="can_focus">False</property> 
      <child> 
       <object class="GtkToolbar"> 
       <property name="visible">True</property> 
       <property name="can_focus">False</property> 
       <property name="show_arrow">False</property> 
       <child> 
        <object class="GtkToolButton"> 
        <property name="visible">True</property> 
        <property name="can_focus">False</property> 
        <property name="label" translatable="yes">__glade_unnamed_7</property> 
        <property name="use_underline">True</property> 
        <property name="stock_id">gtk-about</property> 
        </object> 
        <packing> 
        <property name="expand">False</property> 
        <property name="homogeneous">True</property> 
        </packing> 
       </child> 
       <child> 
        <object class="GtkToolButton"> 
        <property name="visible">True</property> 
        <property name="can_focus">False</property> 
        <property name="label" translatable="yes">__glade_unnamed_8</property> 
        <property name="use_underline">True</property> 
        <property name="stock_id">gtk-add</property> 
        </object> 
        <packing> 
        <property name="expand">False</property> 
        <property name="homogeneous">True</property> 
        </packing> 
       </child> 
       <child> 
        <object class="GtkToolButton"> 
        <property name="visible">True</property> 
        <property name="can_focus">False</property> 
        <property name="label" translatable="yes">__glade_unnamed_9</property> 
        <property name="use_underline">True</property> 
        <property name="stock_id">gtk-go-back</property> 
        </object> 
        <packing> 
        <property name="expand">False</property> 
        <property name="homogeneous">True</property> 
        </packing> 
       </child> 
       </object> 
       <packing> 
       <property name="expand">True</property> 
       <property name="fill">True</property> 
       <property name="position">0</property> 
       </packing> 
      </child> 
      <child> 
       <object class="GtkToolbar" id="10297 927030981 28.68"> 
       <property name="visible">True</property> 
       <property name="can_focus">False</property> 
       <child> 
        <object class="GtkToolButton"> 
        <property name="visible">True</property> 
        <property name="can_focus">False</property> 
        <property name="label" translatable="yes">buttonOrWidget</property> 
        <property name="use_underline">True</property> 
        </object> 
        <packing> 
        <property name="expand">False</property> 
        <property name="homogeneous">True</property> 
        </packing> 
       </child> 
       <child> 
        <object class="GtkToolButton"> 
        <property name="visible">True</property> 
        <property name="can_focus">False</property> 
        <property name="label" translatable="yes">AnotherButton</property> 
        <property name="use_underline">True</property> 
        </object> 
        <packing> 
        <property name="expand">False</property> 
        <property name="homogeneous">True</property> 
        </packing> 
       </child> 
       <child> 
        <object class="GtkToolButton"> 
        <property name="visible">True</property> 
        <property name="can_focus">False</property> 
        <property name="label" translatable="yes">YetAnotherButton</property> 
        <property name="use_underline">True</property> 
        </object> 
        <packing> 
        <property name="expand">False</property> 
        <property name="homogeneous">True</property> 
        </packing> 
       </child> 
       </object> 
       <packing> 
       <property name="expand">True</property> 
       <property name="fill">True</property> 
       <property name="position">1</property> 
       </packing> 
      </child> 
      <child> 
       <object class="GtkToolbar"> 
       <property name="visible">True</property> 
       <property name="can_focus">False</property> 
       <property name="show_arrow">False</property> 
       <child> 
        <object class="GtkToolButton"> 
        <property name="visible">True</property> 
        <property name="can_focus">False</property> 
        <property name="label" translatable="yes">__glade_unnamed_10</property> 
        <property name="use_underline">True</property> 
        <property name="stock_id">gtk-justify-center</property> 
        </object> 
        <packing> 
        <property name="expand">False</property> 
        <property name="homogeneous">True</property> 
        </packing> 
       </child> 
       <child> 
        <object class="GtkToolButton"> 
        <property name="visible">True</property> 
        <property name="can_focus">False</property> 
        <property name="label" translatable="yes">__glade_unnamed_11</property> 
        <property name="use_underline">True</property> 
        <property name="stock_id">gtk-clear</property> 
        </object> 
        <packing> 
        <property name="expand">False</property> 
        <property name="homogeneous">True</property> 
        </packing> 
       </child> 
       <child> 
        <object class="GtkToolButton"> 
        <property name="visible">True</property> 
        <property name="can_focus">False</property> 
        <property name="label" translatable="yes">__glade_unnamed_12</property> 
        <property name="use_underline">True</property> 
        <property name="stock_id">gtk-connect</property> 
        </object> 
        <packing> 
        <property name="expand">False</property> 
        <property name="homogeneous">True</property> 
        </packing> 
       </child> 
       </object> 
       <packing> 
       <property name="expand">False</property> 
       <property name="fill">True</property> 
       <property name="position">2</property> 
       </packing> 
      </child> 
      </object> 
      <packing> 
      <property name="expand">False</property> 
      <property name="fill">True</property> 
      <property name="position">0</property> 
      </packing> 
     </child> 
     <child> 
      <object class="GtkImage"> 
      <property name="visible">True</property> 
      <property name="can_focus">False</property> 
      <property name="stock">gtk-missing-image</property> 
      </object> 
      <packing> 
      <property name="expand">True</property> 
      <property name="fill">True</property> 
      <property name="position">1</property> 
      </packing> 
     </child> 
     </object> 
    </child> 
    </object> 
</interface> 

(完全に縮め中央のツールバーで)結果:

enter image description here

表示を開始するためのウィジェットのいくつかを可能にするアプリケーションウィンドウを成長し、より多くの、図示しないウィジェットがある場合、拡大記号はまだ表示されます:

enter image description here

ウィンドウに最大限にウィンドウのサイズを変更するとそれ以降のすべてのウィジェットを表示するにはspermitうと膨張が消えます。

enter image description here

必要に応じてあなたがあなたの目標を達成するためのツールバーをパックすることができます。

これはあなたが何をしているのかはっきりしていません。

関連する問題