【问题标题】:Gtk.Treeview deselect row via signals and codeGtk.Treeview 通过信号和代码取消选择行
【发布时间】:2012-05-21 08:23:48
【问题描述】:

我正在使用 PyGObject,但我认为这是一个适用于所有 GTK 的问题,所以如果有人知道如何使用 C 或任何东西都应该在 python 中工作。

我有两个树视图,活动和非活动,我从 Sqlite 数据库加载数据,我可以交换和拖放项目从一个到另一个。 这只是一个美学的事情,如果我单击一个树视图上的一个项目,我希望取消选择另一个之前选择的项目。

似乎没有人必须做类似的事情,因为我在网上没有找到任何关于它的信息。

【问题讨论】:

  • 选择模式是多重的?
  • 感谢您的评论,目前没有,不是多选。这是一个人。我不知道将来是否可能成为使其倍增的原因。

标签: python c gtk pygobject gtktreeview


【解决方案1】:

冒着过于基本的风险(也许我误解了这个问题),要操作树视图选择,您使用从GtkTreeView.get_selection 返回的GtkTreeSelection 对象。您可以附加到此对象上的信号,更改当前选择等。

【讨论】:

  • 您已经接近解决方案,但让我领先一步。我的问题的解决方案是:self._treeview_enabled.connect('cursor-changed', self.treeview_row_selected) 并在名为 selection = self._treeview_disabled.get_selection() selection.unselect_all() 的函数中感谢您使用 GtkTreeSelection 对象为我指出正确的方式,因为我所看到的并不简单。
【解决方案2】:

要关闭另一个视图中的选择,您可以获取其选择模式属性并将其设置为GTK_SELECTION_NONE。要在单击时重新打开它,我的想法是您可以捕获grab-focus 信号,在该视图中将选择模式设置为单一,并在另一个视图中将选择模式设置为无:

 (connect view-1 'grab-focus
       (lambda args
         (set-mode (gtk-tree-view-get-selection view-1) "GTK_SELECTION_SINGLE")
         (set-mode (gtk-tree-view-get-selection view-2) "GTK_SELECTION_NONE")))

(该代码使用guile-gnome 包装器,但概念在任何语言绑定中都应该相同。)这种方法的一个问题是,现在为了进行选择,您必须单击树形视图两次 - 一次抓住焦点,然后再次进行选择。

【讨论】:

  • 我没有尝试过您的解决方案,但专注于我的解决方案,我认为我的解决方案使用 get_selection 和 unselect_all 比您的更干净。无论如何感谢您的回复,
猜你喜欢
  • 2017-08-13
  • 2015-01-18
  • 1970-01-01
  • 1970-01-01
  • 2016-07-04
  • 2012-05-21
  • 2017-03-31
  • 1970-01-01
  • 2023-03-16
相关资源
最近更新 更多