2017-08-05 122 views
2

我想我有一個獨特的問題。gtk/glade展開工具欄

我想創建一個水平工具欄,可以容納標籤,按鈕和其他gtk小部件。我想收集儘可能多的信息,但我也需要它爲各種屏幕尺寸工作。

最終我試圖預測GUI會在更小的屏幕上運行,所以我想使用的大多數小部件實際上都不適合,因爲它們會佔用太多空間。

但我仍想讓它們對用戶可用,所以我想我可以有兩行或三行小部件。把最常用的頂端。

最終,我希望用戶能夠在運行時添加不同的小部件,具體取決於他們想要的東西(有點像你有時可以自定義某些程序中的列表標題......例如,Windows資源管理器的文件列表)。

現在,我想要一些小部件佔用大量的空間(如果可用並且其中一些大小已固定)。這樣,空間被最佳地使用。如果一個人在大屏幕液晶顯示器上運行應用程序,他們可以打包更多的小部件,如果沒有,他們可以將其刪除。

基本上它就像一個流量控制但不同。我正在使用水平方塊,但很快意識到了這一點的侷限性。主要是我無法調整窗口的大小,因爲它的總寬度可能導致應用程序太大而無法放在較小的窗口上。

我試圖儘量減少工作量,因爲我不想爲程序重新實現空曠地。 OTH,我想我可以爲不同的設備創建不同的glade界面......可能是最簡單的事情。如果用戶真的想要自定義界面,他們可以手動完成。它需要額外的編程工作,因爲我不得不擔心缺少小部件以及所有這些,但應該不那麼令人擔憂。

雖然我寧願有一個更有用的方法。有任何想法嗎?

構成我的「工具欄」的小部件是圖像,按鈕,標籤,繪圖區域和其他一些標準的gtk小部件。有些人需要佔用盡可能多的橫向空間,而其他人則需要固定大小。所有將具有相同的垂直尺寸。

某些元素將具有固定的位置,如最右和最左而不會改變。

我大概應該是有點更清晰

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

XYZ和ABC都將是固定的小部件必須顯示出來,併到最左邊和右邊RESP。

  • 是我想要配置的小部件。有些人需要擴大規模以利用他們可以獲得的最大規模(並與其他同樣需要擴展的人分享),其中一些將得到修復。最終,用戶應該能夠添加和刪除*小部件而不發出問題,並在需要時對其進行重新排序。他們添加到許多他們應該流下來,以便X Y Z和A B C小部件總是顯示。
+1

您是否熟悉[ToolPalette](https://developer.gnome.org/gtk3/stable/GtkToolPalette.html)? – theGtknerd

回答

1

不知道自己的目標,但要得到類似繪圖,做法事,會是這樣,使用一些GtkToolbar/Gtk.Toolbar包裝上GtkGrid/Gtk.Grid或GtkBox/Gtk.Box。

第一個和最後一個工具欄的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

您可以打包工具欄根據需要實現自己的目標。

不知道這是你所追求的。