2017-08-19 3 views
0

J'ai ceci.remplir une zone de liste avec des éléments .csv

scrollbar = tk.Scrollbar(listbox) 
scrollbar.pack(side=RIGHT, fill=Y) 

listbox = tk.Listbox(root) 
listbox.insert(1,'a') 
listbox.pack() 

listbox.config(yscrollcommand=scrollbar.set) 
scrollbar.config(command=listbox.yview) 

with open('testCUR.csv', newline='') as csvfile: 
    spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|') 
    for row in spamreader: 
     print(', '.join(row),'\n') 

Je me demandais comment remplir correctement la listbox avec les valeurs d'un fichier .csv?

Et aussi pourquoi je ne peux pas utiliser la barre de défilement correctement?

Une fois la zone de liste remplie, je souhaite placer la valeur de la dernière cellule de la sélection dans une variable à utiliser dans une chaîne d'URL. Je n'ai trouvé aucun tutoriel pour cela alors je cherchais de l'aide ici.

J'ai essayé ceci.

listbox = tk.Listbox(root, height=1) 

listbox.place(x=300,y=75) 


with open('testCUR.csv', 'r') as f: 
    reader = csv.reader(f) 
    your_list = list(reader) 
    for item in your_list: 

    listbox.insert(end, item) 

ou cette première entrée uniquement pour les entrées

with open('testCUR.csv', 'r') as f: 
    reader = csv.reader(f) 
    your_list = list(reader) 
    for item in your_list: 

    listbox.insert(1, item) 

Une fois que j'ai toutes les valeurs dans la zone de liste et il est scrollable que j'aimerais si elle était fichue.

listbox = tk.Listbox(root, height=1, scroll=auto) 

Je dois être en mesure d'utiliser uniquement le code de devise qui est la dernière valeur dans le fichier .csv et l'utiliser comme la valeur sélectionnée et ensuite l'utiliser dans une variable pour l'URL. Le fichier .csv ressemble à ceci. Je suis également en train d'essayer les pandas, mais je suis nouveau parce qu'il semble beaucoup plus facile et plus propre à utiliser.

csv_file = ('testCUR.csv') 

df = pd.read_csv(csv_file) 

saved_col = df['CODE'] 

for item in df: 
    listbox.insert(end, saved_col) 

Toujours une erreur. NameError: le nom 'end' n'est pas défini. arrive avec END aussi

+0

Avez-vous lu la documentation sur le widget listbox savoir quelles méthodes sont disponibles? Les méthodes d'insertion de texte sont bien documentées. –

+0

J'ai essayé mais il me semble incompréhensible que ce serait génial si quelqu'un pouvait aider à l'expliquer –

+0

et oui je l'ai lu il n'a tout simplement pas de sens et parfois leurs exemples ne fonctionnent pas du tout –

Répondre

2

I was wondering how to correctly populate the listbox with values from a .csv file?

Pour insérer du texte dans une zone de liste, vous devez donner un indice pour lui dire où insérer. L'index est une chaîne qui est un nombre ou la chaîne "end". Dans votre cas, vous avez utilisé une variable nommée end, qui n'existe bien sûr pas.

Vous pouvez insérer le texte comme celui-ci:

listbox.insert("end", item) 

And also why I cannot use the scroll bar correctly?

Vous n'avez pas décrit pourquoi votre barre de défilement est incorrect.

Le fonctionnement d'une barre de défilement nécessite une conversation bidirectionnelle. La barre de défilement doit être dit ce widget pour faire défiler (via l'attribut command et le widget a besoin de savoir qui scrollbar à jour quand il est défilée (via le

attribut yscrollcommand ou xscrollcommand). Il est également bon de définir explicitement si la barre de défilement est horizontale ou verticale, mais dans votre cas c'est vertical qui est la valeur par défaut

Enfin, il est généralement préférable de faire défiler la barre de défilement et le widget pour avoir le même parent. la barre de défilement est un enfant de la liste déroulante, mais en fait un enfant de quelque chose dont la liste est un enfant Vous avez également fait l'erreur d'essayer d'en faire le parent de la liste avant de créer la liste . Un widget doit exister avant de pouvoir lui donner des enfants.

Voici comment créer la zone de liste et scrollbar:

listbox = tk.Listbox(root) 
scrollbar = tk.Scrollbar(root, orient="vertical", command=listbox.yview) 
listbox.configure(yscrollcommand=scrollbar.set) 
+0

grand merci essayé votre code je ne reçois toujours pas une barre de défilement merci votre pour expliquer tout à fait. Est-ce que l'ajout de noms de colonne n'est pas une donnée si j'imprime la même chose que tout le reste avec cette impression (df [['COUNTRY', 'CODE']]) –

+0

listbox = tk.Listbox (root, height = 1) scrollbar = tk.Scrollbar (root, orient = "vertical", commande = listbox.yview) listbox.configure (yscrollcommand = barre de défilement.set) listbox.place (x = 300, y = 75) csv_file = ('testCUR csv ') df = pd.read_csv (csv_file) your_list = (df [[' pays », 'CODE']]) pour objet your_list: listbox.insert ("end", article) –