gtk/glade可扩展工具栏

gtk/glade可扩展工具栏,gtk,gtk3,Gtk,Gtk3,我想我有一个独特的问题 我正在尝试创建一个类似水平工具栏的小部件,它可以保存标签、按钮和其他gtk小部件。我想打包尽可能多的信息,但我也需要它为各种屏幕大小的工作 最终,我试图预测GUI将运行在更小的屏幕上,因此我想要使用的大多数小部件实际上无法安装,因为它们占用了太多的空间 但是我仍然想让用户可以使用它们,所以我想我可以有两到三行小部件。把最常用的放在最上面 最后,我希望用户能够根据需要在运行时添加不同的小部件(类似于您有时可以自定义某些程序中列表的标题,例如windows资源管理器的文件列表

我想我有一个独特的问题

我正在尝试创建一个类似水平工具栏的小部件,它可以保存标签、按钮和其他gtk小部件。我想打包尽可能多的信息,但我也需要它为各种屏幕大小的工作

最终,我试图预测GUI将运行在更小的屏幕上,因此我想要使用的大多数小部件实际上无法安装,因为它们占用了太多的空间

但是我仍然想让用户可以使用它们,所以我想我可以有两到三行小部件。把最常用的放在最上面

最后,我希望用户能够根据需要在运行时添加不同的小部件(类似于您有时可以自定义某些程序中列表的标题,例如windows资源管理器的文件列表)

现在,我想要一些小部件占用大量空间,如果它是可用的,并且有些是固定大小的。这样,空间得到了最佳利用。如果一个人在一个大的LCD显示器上运行应用程序,他们可以打包更多的小部件,如果没有,他们可以删除它们

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

我正在尽量减少工作量,因为我不想重新实施这个计划。另外,我想我可以为不同的设备创建不同的glade接口。。。可能是最简单的事情。如果用户真的想定制界面,他们可以手动定制。它需要额外的编程工作,因为我必须担心丢失的小部件和所有这些,但应该少担心

不过我宁愿有一个更有用的方法。有什么想法吗

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

某些元素将具有固定的位置,例如最右和最左,并且不会改变

我应该更清楚一点

X Y Z * * * * A B C
* * * * * * * * * *
XYZ和ABC将是固定的小部件,必须分别显示在最左侧和最右侧

  • 是我想要配置的小部件。有些需要扩展以使用它们可以使用的最大大小(并与其他也需要扩展的用户共享),有些则是固定的。最终,用户应该能够添加和删除*小部件,而不会出现问题,并且如果需要,可以对它们进行重新排序。它们添加了许多应该向下流动的组件,以便始终显示xyz和abc小部件

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

第一个和最后一个工具栏将有<代码>显示箭头< /代码>属性设置为<代码> false <代码>,而中间的一个(s)将其设置为<代码> 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>

假的
真的
假的
垂直的
真的
假的
真的
假的
假的
真的
假的
__沼泽地未命名沼泽地7
真的
gtk关于
假的
真的
真的
假的
__沼泽地未命名沼泽地8
真的
gtk添加
假的
真的
真的
假的
__沼泽地未命名沼泽地9
真的
gtk返回
假的
真的
真的
真的
0
真的
假的
真的
假的
按钮控件
真的
假的
真的
真的
假的
另一个按钮
真的
假的
真的
真的
假的
YetAnotherButton
真的
假的
真的
真的
真的
1.
真的
假的
假的
真的
假的
__沼泽地未命名的沼泽地10
真的
gtk校准中心