当前的 Julia Gtk.jl 包中没有实现 GtkListbox 吗?
Is GtkListbox not implemented in the current Julia Gtk.jl package?
我正在使用 Glade 将列表框添加到 window,然后使用 Gtk.jl 的 GtkBuilder 将 GUI 加载到 Julia。当加载列表框时,Julia 认为它是一个 GtkContainer 小部件而不是一个列表框(列表框似乎不存在于 Julia 包的源代码中,除了一两个注释)。我已经搜索了 Gtk.jl 源代码,但找不到任何东西(或者对我正在看的内容理解不够)。
一些列表框信号有效,但最重要的信号 ("row-activated") 无效。我真的需要这个信号来发出...这没有实现吗?有错误吗?难道我做错了什么?我只需要使用更复杂的 GtkTreeView 吗?
注释掉的 julia 代码行是不触发的信号(我也不太关心)。根据 Gtk 文档,"activate" 信号用于 GtkListboxRow,它是用户需要使用的 "row-activated" 信号,但我无法让它发出...
"listbox Example.glade":
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<interface>
<requires lib="gtk+" version="3.20"/>
<object class="GtkWindow" id="win">
<property name="can_focus">False</property>
<child>
<placeholder/>
</child>
<child>
<object class="GtkListBox" id="lb">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkListBoxRow">
<property name="width_request">100</property>
<property name="height_request">80</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">label1</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="width_request">100</property>
<property name="height_request">80</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">label2</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="width_request">100</property>
<property name="height_request">80</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">label3</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</interface>
using Gtk
app = GtkBuilder(filename = "listbox Example.glade")
win = app["win"]
lb = app["lb"]
showall(win)
# id1 = signal_connect(lb, "activate-cursor-row") do widget
# println("activate-cursor-row")
# end
# id2 = signal_connect(lb, "move-cursor") do widget
# println("move-cursor")
# end
id3 = signal_connect(lb, "row-activated") do widget
println("row-activated")
end
id4 = signal_connect(lb, "row-selected") do widget
println("row-selected")
end
id5 = signal_connect(lb, "select-all") do widget
println("select-all")
end
id6 = signal_connect(lb, "selected-rows-changed") do widget
println("selected-rows-change")
end
# id7 = signal_connect(lb, "toggle-cursor-row") do widget
# println("toggle-cursor-row")
# end
id8 = signal_connect(lb, "unselect-all") do widget
println("unselect-all")
end
# id9 = signal_connect(lb, "activate") do widget
# println("activate")
# end
julia> typeof(lb)
Gtk.GtkContainerLeaf
每个信号都有自己的一组参数。例如,"selected-rows-changed" 只有小部件,而 "row-activated" 有小部件和行。
https://developer.gnome.org/gtk3/stable/GtkListBox.html#GtkListBox-selected-rows-changed
https://developer.gnome.org/gtk3/stable/GtkListBox.html#GtkListBox-row-activated
你应该改变:
id3 = signal_connect(lb, "row-activated") do widget
println("row-activated")
end
至:
id3 = signal_connect(lb, "row-activated") do widget, row
println("row-activated")
end
我正在使用 Glade 将列表框添加到 window,然后使用 Gtk.jl 的 GtkBuilder 将 GUI 加载到 Julia。当加载列表框时,Julia 认为它是一个 GtkContainer 小部件而不是一个列表框(列表框似乎不存在于 Julia 包的源代码中,除了一两个注释)。我已经搜索了 Gtk.jl 源代码,但找不到任何东西(或者对我正在看的内容理解不够)。
一些列表框信号有效,但最重要的信号 ("row-activated") 无效。我真的需要这个信号来发出...这没有实现吗?有错误吗?难道我做错了什么?我只需要使用更复杂的 GtkTreeView 吗?
注释掉的 julia 代码行是不触发的信号(我也不太关心)。根据 Gtk 文档,"activate" 信号用于 GtkListboxRow,它是用户需要使用的 "row-activated" 信号,但我无法让它发出...
"listbox Example.glade":
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<interface>
<requires lib="gtk+" version="3.20"/>
<object class="GtkWindow" id="win">
<property name="can_focus">False</property>
<child>
<placeholder/>
</child>
<child>
<object class="GtkListBox" id="lb">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkListBoxRow">
<property name="width_request">100</property>
<property name="height_request">80</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">label1</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="width_request">100</property>
<property name="height_request">80</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">label2</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="width_request">100</property>
<property name="height_request">80</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">label3</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</interface>
using Gtk
app = GtkBuilder(filename = "listbox Example.glade")
win = app["win"]
lb = app["lb"]
showall(win)
# id1 = signal_connect(lb, "activate-cursor-row") do widget
# println("activate-cursor-row")
# end
# id2 = signal_connect(lb, "move-cursor") do widget
# println("move-cursor")
# end
id3 = signal_connect(lb, "row-activated") do widget
println("row-activated")
end
id4 = signal_connect(lb, "row-selected") do widget
println("row-selected")
end
id5 = signal_connect(lb, "select-all") do widget
println("select-all")
end
id6 = signal_connect(lb, "selected-rows-changed") do widget
println("selected-rows-change")
end
# id7 = signal_connect(lb, "toggle-cursor-row") do widget
# println("toggle-cursor-row")
# end
id8 = signal_connect(lb, "unselect-all") do widget
println("unselect-all")
end
# id9 = signal_connect(lb, "activate") do widget
# println("activate")
# end
julia> typeof(lb)
Gtk.GtkContainerLeaf
每个信号都有自己的一组参数。例如,"selected-rows-changed" 只有小部件,而 "row-activated" 有小部件和行。
https://developer.gnome.org/gtk3/stable/GtkListBox.html#GtkListBox-selected-rows-changed https://developer.gnome.org/gtk3/stable/GtkListBox.html#GtkListBox-row-activated
你应该改变:
id3 = signal_connect(lb, "row-activated") do widget
println("row-activated")
end
至:
id3 = signal_connect(lb, "row-activated") do widget, row
println("row-activated")
end