3

我编写了一个简单的程序来打印给定目录中的所有非隐藏文件和子目录。

我现在正在尝试将我的代码迁移到我在 Google 上找到的一个 clist 小部件示例中。除了删除一些不需要的按钮之外,我所做的只是集成代码的顶部部分,除了它只返回每个文件和子目录的第一个字符外,它部分工作。所以我期待这个:

Desktop
Downloads
Scripts
textfile.txt
pron.avi

但是得到了这个:

D
D
S
t
p

这是我更改的代码示例(实际上只是第一个定义)

import gtk, os

class CListExample:
    # this is the part Thraspic changed (other than safe deletions)
    # User clicked the "Add List" button.
    def button_add_clicked(self, data):
        dirList=os.listdir("/usr/bin")
        for item in dirList: 
           if item[0] != '.':
              data.append(item)
        data.sort()
        return


    def __init__(self):
        self.flag = 0
        window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        window.set_size_request(250,150)

        window.set_title("GtkCList Example")
        window.connect("destroy", gtk.mainquit)

        vbox = gtk.VBox(gtk.FALSE, 5)
        vbox.set_border_width(0)
        window.add(vbox)
        vbox.show()

        scrolled_window = gtk.ScrolledWindow()
        scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_ALWAYS)

        vbox.pack_start(scrolled_window, gtk.TRUE, gtk.TRUE, 0)
        scrolled_window.show()

        clist = gtk.CList(1)

        # What however is important, is that we set the column widths as
        # they will never be right otherwise. Note that the columns are
        # numbered from 0 and up (to an anynumber of columns).
        clist.set_column_width(0, 150)

        # Add the CList widget to the vertical box and show it.
        scrolled_window.add(clist)
        clist.show()

        hbox = gtk.HBox(gtk.FALSE, 0)
        vbox.pack_start(hbox, gtk.FALSE, gtk.TRUE, 0)
        hbox.show()
        button_add = gtk.Button("Add List")
        hbox.pack_start(button_add, gtk.TRUE, gtk.TRUE, 0)

        # Connect our callbacks to the three buttons
        button_add.connect_object("clicked", self.button_add_clicked,
clist)

        button_add.show()

        # The interface is completely set up so we show the window and
        # enter the gtk_main loop.
        window.show()

def main():
    gtk.mainloop()
    return 0

if __name__ == "__main__":
    CListExample()
    main()
4

1 回答 1

2

通过 append 方法向 CList 添加数据时,必须传递一个序列。重写你的代码:

def button_add_clicked(self, data):
    dirList = os.listdir("/usr/bin")
    for item in dirList: 
       if not item.startswith('.'):
          data.append([item])
    data.sort()

创建 CList 实例时,您将传递给构造函数的列数。在您的示例中,您使用一个列创建了 CList,这就是为什么您只能在 append 方法中看到传递序列的第一个元素(第一个字符)。

于 2011-07-23T20:57:50.690 回答