2017-08-05 108 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

您可以打包工具栏根据需要实现自己的目标。

不知道这是你所追求的。