首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyGi:如何将GTKListBox与GTKListStore一起使用?

PyGi:如何将GTKListBox与GTKListStore一起使用?
EN

Stack Overflow用户
提问于 2016-12-24 06:28:27
回答 2查看 877关注 0票数 1

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

EN

回答 2

Stack Overflow用户

发布于 2017-03-03 08:25:49

一个简单的例子:

代码语言:javascript
复制
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gio, GObject
import sys

class Item(GObject.GObject):

    text = GObject.property(type = str)

    def __init__(self):
        GObject.GObject.__init__(self)

class GUI:

    def __init__(self):        
        item1 = Item()
        item1.text = "Hello"
        item2 = Item()
        item2.text = "World"

        liststore = Gio.ListStore()
        liststore.append(item1)
        liststore.append(item2)

        listbox=Gtk.ListBox()
        listbox.bind_model(liststore, self.create_widget_func)

        window = Gtk.Window()
        window.add(listbox)
        window.connect("destroy", self.on_window_destroy)
        window.show_all()

    def create_widget_func(self,item):
        label=Gtk.Label(item.text)
        return label

    def on_window_destroy(self, window):
        Gtk.main_quit()

def main():

    app = GUI()
    Gtk.main()

if __name__ == "__main__":
    sys.exit(main())
票数 2
EN

Stack Overflow用户

发布于 2016-12-25 12:37:05

这是我的开源会计程序中的精简代码。

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41308497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档