PyGi:如何使用带有GTKListStore的GTKListBox?

时间:2016-12-23 22:28:27

标签: python gtk pygtk gtk3

我是GTK和Gnome应用程序开发的新手,所以为我的天真道歉。 (我的开发语言是Python)。我想使用ListBox来显示一些数据,并且各个行视图将非常复杂(即由多个不同的小部件组成)。因此,我不想使用TreeView,因为这需要一堆自定义绘图/事件处理。我注意到ListBox有一个bind_model方法,但似乎我无法使用它来绑定ListStore模型,即使ListStore实现了ListModel接口。有人知道如何做到这一点吗?

2 个答案:

答案 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)