gtk / glade可扩展工具栏

时间:2017-08-05 09:17:54

标签: gtk gtk3

我想我有一个独特的问题。

我正在尝试创建一个像widget一样的水平工具栏,可以容纳标签,按钮和其他gtk小部件。我想收集尽可能多的信息,但我也需要它来处理各种屏幕尺寸。

最终,我试图预测GUI会在较小的屏幕上运行,因此我想要使用的大多数小部件实际上都不适合,因为它们会占用太多空间。

但是我仍然希望将它们提供给用户,所以我想我可以有两到三行小部件。把最常用的东西放在顶部。

最终,我希望用户能够在运行时添加不同的小部件,具体取决于他们想要什么(有点像你有时可以为某些程序中的列表自定义标题...例如,windows explorer&# 39; s文件列表)。

现在,我希望一些小部件占用大量空间(如果可用)并且一些小部件已修复。这样,空间被最佳地使用。如果一个人在大型液晶显示器上运行该应用程序,他们可以打包更多的小部件,如果不是,他们可以删除它们。

基本上它有点像流量控制但不同。我正在使用一个水平盒子,但很快意识到了这个限制。主要是我无法调整窗口的大小,小于可能使应用程序太大而无法放在较小窗口上的总宽度。

我试图尽量减少工作量,因为我不想重新实施这项计划。 OTH,我想我可以为不同的设备创建不同的林间界面......可能是最简单的事情。如果用户真的想要自定义界面,他们可以手动完成。它需要额外的编程工作,因为我不得不担心丢失的小部件和所有这些,但应该不那么担心。

我宁愿拥有更实用的方法。有什么想法吗?

组成我的工具栏的小部件"是图像,按钮,标签,绘图区域和一些其他标准gtk小部件。有些人需要占用尽可能多的水平空间,而其他人则需要固定大小。所有都具有相同的垂直尺寸。

有些元素会有固定的位置,例如最左边和最左边的位置而不会改变。

我应该更清楚一点

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

XYZ和ABC将成为必须显示的固定小部件,以及最左侧和右侧的小部件。

  • 是我想要配置的小部件。有些人需要扩展以使用他们可以达到的最大尺寸(并与需要扩展的其他人共享),有些将被修复。最终,用户应该能够毫无问题地添加和删除*小部件,并在需要时重新排序。它们会添加许多它们应该向下流动,以便始终显示X Y Z和A B C小部件。

1 个答案:

答案 0 :(得分:1)

不确定你的目标,但是要获得类似于你的绘图的方法,一种方法,就是使用一些GtkTridbar / Gtk.Toolbar打包在GtkGrid / Gtk.Grid或GtkBox / Gtk.Box上。

第一个和最后一个工具栏将show_arrow属性设置为False,而中间的一个({1}}属性设置为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

将窗口调整到最大程度以及超出范围将显示所有窗口小部件并且扩展器将消失:

enter image description here

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

不确定这是你之后的事。