2017-08-19 8 views
0

Ich habe dies.füllen Sie ein Listenfeld mit. CSV-Elemente

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

Ich fragte mich, wie man die Listbox mit Werten aus einer .csv-Datei korrekt füllen kann?

Und warum kann ich die Bildlaufleiste nicht korrekt verwenden?

Sobald das Listenfeld ausgefüllt ist, möchte ich den Wert der letzten Zelle aus der Auswahl zu einer Variablen für die Verwendung in einer URL-Zeichenfolge setzen. Ich habe keine Tutorials dafür gefunden, deshalb suchte ich hier Hilfe.

Ich habe das versucht.

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) 

oder diese Eingänge nur erster Eintrag

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

    listbox.insert(1, item) 

Nachdem ich alle Werte im Listenfeld und es ist scrollbaren die ich lieben würde, wenn es nur verdammt ist.

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

Ich muß in der Lage sein, nur den Währungscode zu verwenden, die der letzte Wert in der CSV-Datei ist und es als der gewählte Wert verwenden und es dann für die URL in einer Variablen zu verwenden. Die CSV-Datei sieht so aus.

Algeria د.ج DZD 
Andorra € EUR 
Angola Kz AOA 
Anguilla $ XCD 
Antigua and Barbuda $ XCD 
Argentina $ ARS 
Armenia  AMD 
Aruba ƒ AWG 
Ascension Island £ (*none*) 

Ich versuche auch Pandas, aber bin neu dazu, weil es viel einfacher und sauberer zu verwenden aussieht.

csv_file = ('testCUR.csv') 

df = pd.read_csv(csv_file) 

saved_col = df['CODE'] 

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

Immer Fehler. NameError: Name 'end' ist nicht definiert. geschieht mit END auch

+0

Haben Sie die Dokumentation auf der Listbox-Widget lesen zu wissen, welche Methoden stehen zur Verfügung? Die Methoden zum Einfügen von Text sind gut dokumentiert. –

+0

Ich habe versucht, aber es scheint mir unverständlich wäre es toll, wenn jemand könnte helfen, es zu erklären –

+0

und ja ich habe es gelesen es macht einfach keinen Sinn und manchmal ihre Beispiele funktionieren überhaupt nicht –

Antwort

2

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

Um Text in einem Listenfeld einfügen Sie es einen Index geben muss, es zu sagen, wo einzufügen. Der Index ist eine Zeichenfolge, die entweder eine Zahl oder die Zeichenfolge "end" ist. In Ihrem Fall haben Sie eine Variable namens end verwendet, die natürlich nicht existiert.

können Sie den Text wie folgt ein:

listbox.insert("end", item) 

And also why I cannot use the scroll bar correctly?

Sie haben nicht beschrieben, warum Ihre Scrollbar nicht korrekt ist.

Das Erstellen einer Bildlaufleiste erfordert eine zweiseitige Konversation. Die Scrollbar muss gesagt werden, was Widget (über das command Attribut zu blättern, und das Widget muss wissen, welche Scrollbar zu aktualisieren, wenn es (über das yscrollcommand oder xscrollcommand Attribut) gescrollt wird.

Es ist auch gut zu explizit festgelegt, ob die Scrollbar ist horizontal oder vertikal, aber in Ihrem Fall ist es vertikal, die die Standardeinstellung ist

Und schließlich ist es in der Regel die beste Praxis, um die Bildlaufleiste und das Widget scrollen, um die gleiche Eltern haben zu haben Die Bildlaufleiste ist ein untergeordnetes Element der Listbox, machen Sie sie zu einem Kind von dem, was auch immer die untergeordnete Liste ist, und Sie haben auch den Fehler gemacht, dass Sie versuchen, es zum übergeordneten Element der Listbox zu machen, bevor Sie die Listbox erstellt haben . Ein Widget muss existieren, bevor Sie es Kindern geben können.

Hier ist, wie das Listenfeld und Scrollbar zu erstellen:

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

danke, dass du deinen Code ausprobiert hast, bekomme immer noch keine Bildlaufleiste, danke für deine Erklärung. Es werden nur Spaltennamen und keine Daten hinzugefügt, wenn ich dasselbe druecke, drucke alles mit diesem Ausdruck (df [[COUNTRY ',' CODE ']]) –

+0

listbox = tk.Listbox (root, height = 1) Bildlaufleiste = tk.Scrollbar (root, orient = "vertikal", command = listbox.yview) listbox.configure (yscrollcommand = scrollbar.set) listbox.place (x = 300, y = 75) csv_datei = ('testCUR .csv ') df = pd.read_csv (csv_file) your_list = (df [[' COUNTRY‘, 'CODE']]) für Artikel in your_list: listbox.insert ("end", Punkt) –

Verwandte Themen