Я разрабатываю приложение, используя Quickly. У меня есть Gtk.TreeView с Gtk.ListStore в качестве модели. Режим выбора Gtk.SelectionMode установлен в Gtk.SelectionMode.MULTIPLE.
Проблема в том, что Gtk.SelectionMode не работает должным образом:
Проблема может быть легко воспроизведена путем создания нового приложения 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)
Я пропускаю что-то очевидное? Или это может быть ошибкой?
В примечании, если вы установите выделение «Одиночный», также невозможно отменить выбор строки.
РЕДАКТИРОВАТЬ
Если вы хотите мне помочь, вы можете загрузить тестовое приложение здесь strike> вместо создания нового проекта с Quickly на вашем компьютере. своя. Обратите внимание, что вам нужно быстро запустить его.
$ cd test
$ quickly run
Я реализовал несколько обратных вызовов для тестирования в test / test / TestWindow.py. Вы можете найти определение пользовательского интерфейса в test / data / ui / TestWindow.ui.
Я не могу дать полный ответ, но хотел бы поделиться им. Если вы задаете вопрос о программировании, всегда включайте минимальный рабочий пример, чтобы другие могли быстро (ха, каламбур) запуститься и протестировать ваш код. Мне нужно будет установить 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
.
Я нашел решение своей проблемы.
Свойство 'can-focus'
Gtk.TreeView по умолчанию установлено в False
. Установка этого параметра в True
исправляет странное поведение выбора, а также другие странные действия, которые могут возникнуть, например, невозможность изменить размер столбца, когда его свойство 'resizable'
установлено в True
.