我在python中有一个combobox小部件,我希望能够选择多个项目,但我开始认为这是不可能的。我看到,通过将模式设置为倍数,使用Gtk.TreeView()
是可能的。有没有办法让combobox来做这件事?如果没有,树视图可以放在组合框中吗?如果可以,如何放置(请给出简短的编码示例)?我使用的是GTK3,但我可能可以从GTK2的例子中翻译出来。
经过大量研究,我认为组合框只能容纳一个项目只是一个限制。因此,答案是:
是的,可以设置一个组合框来选择多个(如果其中有TreeView)
因此,
是的,TreeView可以放置在组合框中。
但是,它的行为并不正确,因为ComboBox充当了一个容器,TreeView始终可见,而不仅仅是在激活ComboBox时。可以设置为选择多个使用Gtk.TreeSelection(从Gtk.Treview.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()
我将通过激活组合框来隐藏和显示树状视图。我会告诉你进展如何。