Виджет Python Clist не возвращает ожидаемый список, возвращает только первый символ каждого элемента - PullRequest
3 голосов
/ 23 июля 2011

Я написал простую программу для распечатки всех не скрытых файлов и подкаталогов в данном каталоге.

Я сейчас пытаюсь перенести мой код в пример виджета clist, который я нашел в Google. Помимо удаления некоторых ненужных кнопок, я изменил только верхнюю часть для интеграции моего кода, и он частично работает за исключением того, что он возвращает только первый символ каждого файла и подкаталога. Так что я ожидал этого:

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

1 Ответ

2 голосов
/ 24 июля 2011

Когда вы добавляете данные в 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 с одним столбцом, поэтому вы можете видеть только первый элемент (первый символ) переданной последовательности в методе добавления.

...