我是GTK和Gnome应用程序开发的新手,所以为我的天真道歉。 (我的开发语言是Python)。我想使用ListBox
来显示一些数据,并且各个行视图将非常复杂(即由多个不同的小部件组成)。因此,我不想使用TreeView
,因为这需要一堆自定义绘图/事件处理。我注意到ListBox
有一个bind_model
方法,但似乎我无法使用它来绑定ListStore
模型,即使ListStore
实现了ListModel
接口。有人知道如何做到这一点吗?
答案 0 :(得分:0)
这是来自我的开源会计程序的精简代码。
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, GdkPixbuf, Gdk
import os, sys
class GUI :
def __init__(self):
listbox = Gtk.ListBox()
employee_name_label = Gtk.Label("Henry", xalign=1)
combo = Gtk.ComboBoxText()
combo.set_property("can-focus", True)
for name in ["bar", "foo", "python"]:
combo.append('0', name)
list_box_row = Gtk.ListBoxRow()
hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=5)
list_box_row.add(hbox)
switch = Gtk.Switch()
switch.props.valign = Gtk.Align.CENTER
project_time_label = Gtk.Label("0:00:00", xalign=1 )
project_time_label.set_property('width-chars', 8)
hbox.pack_start(employee_name_label, True, False, 5)
hbox.pack_end(project_time_label, False, False, 5)
hbox.pack_end(switch, False, False, 5)
hbox.pack_end(combo, False, False, 5)
listbox.add(list_box_row)
window = Gtk.Window()
window.add(listbox)
window.connect("destroy", self.on_window_destroy)
window.show_all()
def on_window_destroy(self, window):
Gtk.main_quit()
def main():
app = GUI()
Gtk.main()
if __name__ == "__main__":
sys.exit(main())
它可能无法准确回答您的问题,但它确实有效并且它显示了使用ListBox的方法。 ListBox是复杂设置的一个很好的选择。在我的情况下,我每秒都做了很多操作,它使Treeviews崩溃了。
答案 1 :(得分:0)
一个简单的例子:
System.Windows.Forms.DataGridViewRowCollection.Add(Object[] values)