Python CLIST non widget di ritorno elenco previsto, restituisce solo il primo carattere di ogni elemento

StackOverflow https://stackoverflow.com/questions/6801370

Domanda

Ho scritto un semplice programma per stampare tutti i file non nascosti e le sottodirectory in una data directory.

Ora sto cercando di migrare il mio codice in un widget esempio CLIST ho trovato su Google. Altro che strappa alcuni pulsanti non necessari, tutto quello che ho cambiato è stata la parte superiore di integrare il mio codice, e funziona parzialmente eccezione del fatto che restituisce solo il primo carattere di ogni file e sottodirectory. Quindi mi aspettavo questo:

Desktop
Downloads
Scripts
textfile.txt
pron.avi

Ma invece ottenuto questo:

D
D
S
t
p

Ecco l'esempio con il codice ho cambiato (in realtà solo il primo 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()
È stato utile?

Soluzione

Quando si aggiungere dati al CList attraverso il metodo di aggiunta, è necessario passare una sequenza. Riscrivere il codice:

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

Quando si crea un'istanza CList si passa al numero costruttore collumns. Nel tuo esempio è stato creato con una sola CList collumn, è per questo che si può vedere solo il primo elemento (primo carattere) della sequenza di passato nel metodo di accodamento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top