У меня есть виджет combobox в python, который я хотел бы иметь возможность выбирать несколько элементов, но я начинаю думать, что это невозможно. Я вижу, что можно использовать Gtk.TreeView()
, установив режим в несколько. Есть ли способ получить combobox для этого? Если нет, может ли древовидное представление быть помещено внутри выпадающего списка, и если да, то как (пример короткого кодирования, пожалуйста)? Я использую GTK3, но я мог бы перевести его с примера GTK2.Как выбрать несколько элементов в combobox GTK в python
1
A
ответ
1
После долгих исследований, я думаю, что это просто ограничение в поле со списком, которое может содержать только один элемент. Итак, ответ:
Да, выпадающий можно настроить, чтобы выбрать несколько (если он имеет TreeView в нем)
и, таким образом,
Да, TreeView может быть помещен внутрь ComboBox.
НО, он не ведет себя корректно, поскольку ComboBox действует как контейнер с TreeView, который всегда отображается, а не только при активации ComboBox. Он может быть установлен для выбора множественного использования Gtk.TreeSelection (получен из Gtk.Treeview.get_selection()).
Вот код:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
from gi.repository import Gtk
PEOPLE = [
"Frank",
"Martha",
"Jim Bob",
"Francis"
]
class TreeCombo(object):
def __init__(self):
self.win = Gtk.Window(title="Combo with liststore")
self.win.connect('delete-event', Gtk.main_quit)
self.store = Gtk.ListStore(str)
for person in PEOPLE:
self.store.append([person])
# self.combo = Gtk.ComboBox.new_with_model(self.store)
self.combo = Gtk.ComboBox()
self.tree = Gtk.TreeView(self.store)
self.selector = self.tree.get_selection()
self.selector.set_mode(Gtk.SelectionMode.MULTIPLE)
self.combo_cell_text = Gtk.CellRendererText()
self.column_text = Gtk.TreeViewColumn("Text", self.combo_cell_text, text=0)
self.tree.append_column(self.column_text)
self.combo.add(self.tree)
self.win.add(self.combo)
self.win.show_all()
def main():
prog = TreeCombo()
Gtk.main()
if __name__ == "__main__":
main()
Я собираюсь возиться с бегами и показывая TreeView с активацией ComboBox. Я дам вам знать, как это происходит.
Игра со скрытым видом виджета Gtk.TreeView оставляет выпадающий список, который имеет нежелательный вид. Я не рекомендую. Я просто использую кнопку и открываю пользовательский Gtk.Dialog. Не так, как я надеялся, а не так, но лучше всего я могу думать. – narnie