Gtk.SelectionMode.MULTIPLE позволяет выбрать только одну строку в Gtk.TreeView

Я разрабатываю приложение, используя Quickly. У меня есть Gtk.TreeView с Gtk.ListStore в качестве модели. Режим выбора Gtk.SelectionMode установлен в Gtk.SelectionMode.MULTIPLE.

Проблема в том, что Gtk.SelectionMode не работает должным образом:

  • Одновременно может быть выбрана только одна строка.
  • Невозможно выбрать несколько строк с помощью клавиши Ctrl или Shift.
  • После выбора строки ее нельзя отменить с помощью клавиши Ctrl.
  • Ничего не происходит, когда я нажимаю клавиши со стрелками.

Проблема может быть легко воспроизведена путем создания нового приложения Ubuntu с помощью Quickly (или вы можете загрузить тестовое приложение ниже).

$ quickly create ubuntu-application test
$ cd test
$ quickly design

Создайте TreeView с ListStore в качестве модели. Установите режим GtkTreeSelection в «Несколько». Добавьте несколько столбцов и значений в ListStore. Добавьте несколько TreeViewColumns с CellRendererTexts в Treeview.

$ quickly run -v

Обратите внимание, вы не можете выбрать несколько строк.

Некоторые вещи я уже пробовал, но ничего не изменило:

  • Установка режима выбора в коде.

    self.ui.selection.set_mode(Gtk.SelectionMode.MULTIPLE)

    или

    self.ui.treeview.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE)

  • Перемещение GtkTreeSelection <child> под GtkTreeViewColumn <child> в файл пользовательского интерфейса.

  • Удаление GtkTreeSelection из файла пользовательского интерфейса и установка выбора с помощью

    self.ui.treeview.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE)

Я пропускаю что-то очевидное? Или это может быть ошибкой?

В примечании, если вы установите выделение «Одиночный», также невозможно отменить выбор строки.

РЕДАКТИРОВАТЬ

Если вы хотите мне помочь, вы можете загрузить тестовое приложение здесь вместо создания нового проекта с Quickly на вашем компьютере. своя. Обратите внимание, что вам нужно быстро запустить его.

$ cd test
$ quickly run

Я реализовал несколько обратных вызовов для тестирования в test / test / TestWindow.py. Вы можете найти определение пользовательского интерфейса в test / data / ui / TestWindow.ui.

1
задан 11 May 2013 в 21:56

2 ответа

Я не могу дать полный ответ, но хотел бы поделиться им. Если вы задаете вопрос о программировании, всегда включайте минимальный рабочий пример, чтобы другие могли быстро (ха, каламбур) запуститься и протестировать ваш код. Мне нужно будет установить Quickly, создать проект Quickly и изменить код, чтобы посмотреть, о чем идет речь, и попытаться исправить его, чего я не сделаю.

При этом здесь приведен минимальный рабочий пример, который ведет себя правильно, поэтому я предполагаю, что Quickly где-то совершает магию, которая переопределяет это поведение.

from gi.repository import Gtk

class TestWindow(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self)
        self.resize(400, 400)
        self.connect("delete-event", Gtk.main_quit)

        ls = Gtk.ListStore(str)
        ls.append(["Testrow 1"])
        ls.append(["Testrow 2"])
        ls.append(["Testrow 3"])
        tv = Gtk.TreeView(ls)
        tr = Gtk.CellRendererText()
        col = Gtk.TreeViewColumn("Testcolumn", tr, text=0)
        tv.append_column(col)
        sel = tv.get_selection()
        sel.set_mode(Gtk.SelectionMode.MULTIPLE)

        self.add(tv)
        self.show_all()

if __name__ == "__main__":
    app = TestWindow()
    Gtk.main()

Обратите внимание, что вы используете неправильный режим выбора дерева в своем вопросе, правильный Gtk.SelectionMode.MULTIPLE.

0
ответ дан 11 May 2013 в 21:56

Я нашел решение своей проблемы.

Свойство 'can-focus' Gtk.TreeView по умолчанию установлено в False. Установка этого параметра в True исправляет странное поведение выбора, а также другие странные действия, которые могут возникнуть, например, невозможность изменить размер столбца, когда его свойство 'resizable' установлено в True.

0
ответ дан 11 May 2013 в 21:56

Другие вопросы по тегам:

Похожие вопросы: