【问题标题】:How can I make the icons in an IconView spread out evenly?如何使 IconView 中的图标均匀分布?
【发布时间】:2011-11-01 15:00:46
【问题描述】:

我有一个 gtk.IconView,里面有几个图标。有时我会调整窗口大小以查看更多图标。当我这样做时,生成的额外空间不会在所有列之间均匀分布。相反,它会全部放在右侧,直到有足够的空间容纳新列。

我在the documentation 中没有看到任何可以让我自动执行此操作的内容。我是否需要检查调整大小信号,然后手动设置列间距和行间距?如果是这样,我应该使用哪个调整大小信号。

这是我的意思的图片。我已将多余的空间标记为红色。

这是我希望看到的(当然,与我可怜的 MS Paint 工作不同,这些间隙实际上是均匀分布的)。

【问题讨论】:

  • 你有没有找到解决办法?
  • @rafalcieslak 不,这是一个低优先级。这甚至可能是不可能的,因为手动设置行间距实际上可能无法解决问题。抱歉,我还没有仔细研究过。

标签: python resize gtk window pygtk


【解决方案1】:

我们在 Ubuntu Accomplishments Viewer 中遇到了这个问题,当我们设法解决它时,我将介绍我们的解决方案。

诀窍是将 GtkIconView 放在 GtkScrolledWindow 中,并将其 hscrollbar_policy 设置为“always”。然后,必须使用 check-resize 信号来在用户调整窗口大小时做出反应(请注意,必须检查大小是否已更改,因为在例如拖动窗口时也会发出信号)。当大小改变时,GtkIconView 使用的模型必须被清除并重新创建,因为这会触发 GtkIconView 正确地重新分配新获得的空间(或缩小)。 此外,结果水平滚动条永远不会被看到,因为 GtkIconView 使用的空间与 GtkScrolledWindow 使用的空间完全相同。

【讨论】:

    【解决方案2】:

    是的,看起来很胖的样子之后,你需要自己做这件事。关于信号,我会检查 GtkContainer::check-resize

    【讨论】:

      【解决方案3】:

      使用事件 size_allocate。

      我定义了我的班级:

      class toto(Gtk.IconView):
          def __init__(self):
              super(toto,self).__init__()
              self.connect("size_allocate",self.resize)
              self.set_columns(4)
      

      然后我修改工作列数

      def resize(self,_iv,_rect):
          print("X",rect.x)
          print("Y",rect.y)
          print("W",rect.width)
          print("H",rect.height)
          # calculate number of columns, let's say 3
          _cols=3
          self.set_columns(_cols)
      

      似乎对我有用

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-07
        • 2015-10-24
        • 2011-04-08
        • 1970-01-01
        相关资源
        最近更新 更多