如何制作具有多项选择的 GTK 2 列表?
How do I make a GTK 2 list with multiple selection?
在 GTK 3 版本中,ListBox
小部件添加了对 multiple elements being selected from the list 的支持:
我想用 GTK 2 达到同样的效果。我正在考虑使用 ScrolledWindow
和 VBox
的 CheckButton
。不过,我担心它看起来不会很好; like this,但带有滚动条:
有人知道使用 GTK 2 模拟第一张图片中的功能的好方法吗?
原来有一种方法可以做到这一点 buried in the documentation! In fact, you should find it all the way back to GTK 2.0,但选择常量可能有不同的名称 (SELECTION_MULTI
)。
小部件如下所示:
配色方案继承自我的 GNOME 主题,所以不要太介意 window 样式。此小部件适用于 Ctrl
和 Shift
键。只需单击不同的项目,它不会自动进行多项选择。
这是我为此制作的 (Python 2) MWE:
import gtk
class UI(gtk.Window):
def __init__(self):
gtk.Window.__init__(self)
self.set_position(gtk.WIN_POS_CENTER)
self.set_default_size(250, 150)
store = gtk.ListStore(str)
for i in range(7):
# The list notation here is odd, but required.
store.append(["Item %d" % i])
tree_view = gtk.TreeView()
tree_view.set_model(store)
# The view can support a whole tree, but we want just a list.
renderer = gtk.CellRendererText()
column = gtk.TreeViewColumn("Multiple Selection", renderer, text=0)
tree_view.append_column(column)
# This is the part that enables multiple selection.
tree_view.get_selection().set_mode(gtk.SELECTION_MULTIPLE)
scrolled_tree = gtk.ScrolledWindow()
scrolled_tree.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_ALWAYS)
scrolled_tree.add_with_viewport(tree_view)
self.add(scrolled_tree)
def main():
win = UI()
win.connect("destroy", gtk.main_quit)
win.show_all()
gtk.main()
if __name__ == "__main__":
main()
在 GTK 3 版本中,ListBox
小部件添加了对 multiple elements being selected from the list 的支持:
我想用 GTK 2 达到同样的效果。我正在考虑使用 ScrolledWindow
和 VBox
的 CheckButton
。不过,我担心它看起来不会很好; like this,但带有滚动条:
有人知道使用 GTK 2 模拟第一张图片中的功能的好方法吗?
原来有一种方法可以做到这一点 buried in the documentation! In fact, you should find it all the way back to GTK 2.0,但选择常量可能有不同的名称 (SELECTION_MULTI
)。
小部件如下所示:
配色方案继承自我的 GNOME 主题,所以不要太介意 window 样式。此小部件适用于 Ctrl
和 Shift
键。只需单击不同的项目,它不会自动进行多项选择。
这是我为此制作的 (Python 2) MWE:
import gtk
class UI(gtk.Window):
def __init__(self):
gtk.Window.__init__(self)
self.set_position(gtk.WIN_POS_CENTER)
self.set_default_size(250, 150)
store = gtk.ListStore(str)
for i in range(7):
# The list notation here is odd, but required.
store.append(["Item %d" % i])
tree_view = gtk.TreeView()
tree_view.set_model(store)
# The view can support a whole tree, but we want just a list.
renderer = gtk.CellRendererText()
column = gtk.TreeViewColumn("Multiple Selection", renderer, text=0)
tree_view.append_column(column)
# This is the part that enables multiple selection.
tree_view.get_selection().set_mode(gtk.SELECTION_MULTIPLE)
scrolled_tree = gtk.ScrolledWindow()
scrolled_tree.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_ALWAYS)
scrolled_tree.add_with_viewport(tree_view)
self.add(scrolled_tree)
def main():
win = UI()
win.connect("destroy", gtk.main_quit)
win.show_all()
gtk.main()
if __name__ == "__main__":
main()