GtkListBox,如何防止在窗口显示时自动选​​择一行

时间:2015-05-23 18:38:24

标签: pygtk gtk3

我有一个列表框,其中有几行附加到窗口。

list_box = Gtk.ListBox()
list_box.insert(Gtk.Label('foo'), -1)
list_box.insert(Gtk.Label('bar'), -1)
list_box.insert(Gtk.Label('qux'), -1) # ListBoxRow is added automatically

window = Gtk.Window()
window.add(list_box)
window.show_all()

当我呼叫show_all()时,列表的第一行会自动被选中,我不希望发生这种情况。如何防止自动选择呢?
我试着改变函数调用的顺序

window.show_all()
window.add(list_box)

打破了布局,窗口的大小不适合列表。

3 个答案:

答案 0 :(得分:0)

ListBox有一个属性selection-mode,您可以将其设置为Gtk.SELECTION_NONE。在这种情况下,不会选择任何行(以后不能选择)。我不知道这是不是你想要的。

您还可以调用方法unselect_all,这将取消选择所有行。为此,ListBox必须处于SELECT_MULTIPLE或SELECT_SINGLE模式。

此示例似乎完全按预期工作(即在开始时没有选择,如果选择了一行,则按钮可以取消选择它)。如果在您的安装中它不起作用,我会尝试更新您的包:

from gi.repository import Gtk

class MainWindow(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self)
        self.connect("delete-event", self.on_delete)

        self.listbox = Gtk.ListBox()
        self.listbox.insert(Gtk.Label('foo'), -1)
        self.listbox.insert(Gtk.Label('bar'), -1)
        self.listbox.insert(Gtk.Label('qux'), -1) # ListBoxRow is added automatically

        button = Gtk.Button("Clear selection")
        button.connect("clicked", self.on_button_clicked)

        vbox = Gtk.VBox()
        vbox.pack_start(button, False, True, 0)
        vbox.pack_start(self.listbox, False, True, 0)

        self.add(vbox)
        self.show_all()

        Gtk.main()

    def on_button_clicked(self, btn):
        self.listbox.unselect_all()

    def on_delete(self, win, event):
        Gtk.main_quit()


def main():
    w = MainWindow()

    return 0

if __name__ == '__main__':
    main()

关于gtk3主题的说明:某些主题根本不显示所选行。特别黑暗的主题,例如。 FlatStudioDark,也是一些轻量级的主题。

答案 1 :(得分:0)

我也遇到了这个问题,我使用下面的代码来做到这一点:

listbox = Gtk.ListBox(margin=0)
listbox.set_selection_mode(Gtk.SelectionMode.NONE)

我仍然可以单击每一行,并对以下内容进行回调:

listbox.connect("row-activated", self.callback)

答案 2 :(得分:0)

在 list_box 顶部添加一个虚拟标签并将其隐藏:

dummyLabel = Gtk.Label('nothing') # workaround for focus of title entry
list_box.insert(dummyLabel, -1)
list_box.insert(Gtk.Label('foo'), -1)
list_box.insert(Gtk.Label('bar'), -1)
list_box.insert(Gtk.Label('qux'), -1)  # ListBoxRow is added automatically
window = Gtk.Window()
window.add(list_box)
window.show_all()
dummyLabel.hide()
Gtk.main()

结果: result