如何在python中选择GTK combobox中的多个项目

问题描述:

我在python中有一个组合框控件,我希望能够选择多个项目,但我开始认为这是不可能的。我发现使用Gtk.TreeView()时可以将模式设置为多种。有没有办法让一个组合框来做到这一点?如果不是,树视图可以放置在组合框内,如果是这样(请简短编码示例)?我使用的是GTK3,但我可以从GTK2的例子中翻译它。如何在python中选择GTK combobox中的多个项目

经过大量的研究,我认为这只是组合框的限制,它只能容纳一个项目。因此,答案是:

是,组合框可以设置选择多(如果它有它一个TreeView)

,因此,

是的,一个TreeView可以放在里面一个组合框。

但是,它的行为并不正确,因为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() 

我要更动隐藏和显示与组合框的激活树视图。我会让你知道它是怎么回事。

+0

玩弄隐藏Gtk.TreeView小部件会使组合框变高,这样看起来不合意。我不推荐它。我只打算使用一个按钮并打开一个自定义的Gtk.Dialog。不像我所希望的那样美妙,但我能想到的最好。 – narnie 2012-03-03 00:36:29