Python列表小部件没有返回预期的列表,只返回每个项目的第一个字符



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

我现在正试图将我的代码迁移到我在谷歌上找到的列表小部件示例中。除了去掉一些不需要的按钮外,我只更改了顶部部分以集成我的代码,除了它只返回每个文件和子目录的第一个字符外,它部分工作。所以我期望这样:

Desktop
Downloads
Scripts
textfile.txt
pron.avi

却得到了这个:

D
D
S
t
p

下面是我修改的代码示例(实际上只是第一个def)

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()

当您通过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方法中看到传递序列的第一个元素(第一个字符)。

相关内容

  • 没有找到相关文章

最新更新