我在 python 中有一个组合框小部件,我希望能够选择多个项目,但我开始认为这是不可能的。我看到可以Gtk.TreeView()
通过将模式设置为多个来使用。有没有办法让组合框做到这一点?如果不是,可以将树视图放置在组合框内吗?如果可以(请提供简短的编码示例)?我正在使用 GTK3,但我可能可以从 GTK2 示例中翻译它。
问问题
1956 次
1 回答
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()
我将通过激活组合框来隐藏和显示树视图。我会让你知道情况如何。
于 2012-03-03T00:28:26.013 回答