2012-05-21 5 views
2

Я использую PyGObject, но я думаю, что это вопрос, который может быть адаптирован ко всем GTK, поэтому, если кто-то знает, как это сделать с помощью C, или что-то должно работать и на python.Gtk.Treeview отменить выбор строки с помощью сигналов и кода

У меня есть два дерева, активные и неактивные, я загружаю данные из базы данных Sqlite, и я могу поменять местами и перетащить & отбросить элементы от одного к другому. Это всего лишь эстетическая вещь, если я нажму на один элемент в одном дереве, я хочу, чтобы предыдущий выбранный элемент на другом был отменен.

Кажется, что никто не должен был делать что-то подобное, потому что я ничего не нашел в сети.

+0

Является ли режим выбора несколько? –

+0

Спасибо за ваш комментарий, в настоящее время нет, это не множественный выбор. Это один. Я не знаю, может ли в будущем быть причиной для его множественности. – andyinno

ответ

2

В случае риска быть слишком простым (возможно, я неправильно понимаю проблему), чтобы управлять выбором дерева, вы используете объект GtkTreeSelection, возвращенный с . Вы можете подключаться к сигналам на этом объекте, изменять текущий выбор и т. Д.

+0

Вы были рядом с решением, но сделали меня на шаг впереди. Решение моей проблемы состояло в следующем: 'self._treeview_enabled.connect ('cursor-changed', self.treeview_row_selected)' и в функции под названием 'selection = self._treeview_disabled.get_selection() selection.unselect_all()' спасибо за указание меня по правильному пути с объектом GtkTreeSelection, который для того, что я видел, не является простым. – andyinno

0

Чтобы отключить выбор в другом представлении, вы можете получить его свойство режима выбора и установить значение 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, но концепция должна быть одинаковой при любой привязке языка.) Проблема с этим подходом заключается в том, что теперь, чтобы сделать выбор, вы должны дважды щелкнуть по дереву - один раз, чтобы захватить фокус, и снова сделайте выбор.

+0

Я не пробовал ваше решение, но сосредоточился на своем, я думаю, что мой, используя get_selection и unselect_all, более чист, чем ваш. в любом случае, спасибо за ваш ответ, – andyinno