質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

リストボックス

ユーザーがリストから1つ以上のアイテムを選択できるようにするGUI要素です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1300閲覧

csvファイルを選択後、カラム名のみをリストボックスに表示させ、カラム名をクリックすることで、テキストボックスにカラム名に対応している列の値を表示させたい

Syo-PT

総合スコア22

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

リストボックス

ユーザーがリストから1つ以上のアイテムを選択できるようにするGUI要素です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/07/25 16:56

前提・実現したいこと

csvファイルを選択後、指定した列だけを抽出し、カラム名のみをリストボックスに表示をさせています。
その後、リストボックスに表示させたカラム名をクリックすることで、テキストボックスにカラム名に対応している列の値を表示させたく考えています。

発生している問題・エラーメッセージ

エラーメッセージはないのですが、テキストボックスにカラム名が表示されてしまい、列の値が表示されません

該当のソースコード

Python

1import tkinter as tk 2from tkinter import filedialog 3import pandas as pd 4import os 5 6root=tk.Tk() 7root.title("チョイス") 8root.geometry("600x600") 9 10frame=tk.Frame() 11frame.grid(row=0,sticky="we") 12 13frame_button=tk.Frame() 14frame_button.grid(row=1,sticky="we") 15 16txt=tk.Entry(width=60) 17txt.place(x=150,y=150) 18txtData={} 19 20list_value=tk.StringVar() 21listbox=tk.Listbox(frame,height=30,listvariable=list_value,selectmode="single") 22 23def btn_click(): 24 type = [("all file","*")] 25 path = os.getcwd () 26 file_path = filedialog.askopenfilename(filetypes = type, initialdir = path) 27 28 df = pd.read_csv(file_path, engine="python",usecols=[1,7,19,20,31,32,44,45,46,47,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,142,143,144,148,149,150,154,155,156,160,161,162,166,167,168,172,173,174,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192]) 29 df_columns=df.columns.values 30 31 new_file_path = file_path + "_a" +".csv" 32 df.to_csv(new_file_path, index=False) 33 headerList=df_columns 34 35 list_value.set(df_columns) 36 for i in range(0,len(headerList)): 37 txtData[i]={} 38 txtData[i]['name']=headerList[i] 39 txtData[i]['list']=[] 40 41 txt.insert(tk.END,headerList[i]) 42 43 for rowList in df: 44 for j in range(0,len(rowList)): 45 txtData[j]['list'].append(rowList[j]) 46 47Button=tk.Button(frame_button,text="選択",command=btn_click) 48Button.grid(row=1,column=0) 49 50listbox.pack() 51root.mainloop() 52

補足情報(FW/ツールのバージョンなど)

M1mac
anacondaを使用しています。
ご教授いただけましたら幸いです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

テキストボックスにカラム名が表示されてしまい、列の値が表示されません

python

1 # 問題点: txt がテキストウィジェット、 headerList[i] はカラム名 2 txt.insert(tk.END,headerList[i])

リストボックスに表示させたカラム名をクリックすることで

のイベントは、質問に記載のコードでは実装されてません。

データ自体は、`txtData[i]['list']' に格納されてるはずなので、
List ウィジェットの使い方を調べて下さい。

  • リストから選択した時 (bind でイベントを登録)
  • リストから選択されたカラムの index を判別
  • txtData[i]['list'] の内容を txt ウィジェットに表示

投稿2021/07/29 05:38

編集2021/07/29 05:38
teamikl

総合スコア8664

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Syo-PT

2021/07/30 08:59

ご回答ありがとうございます。 実装し直そうと思います!
guest

0

python

1 2def getListFromSelectIdx(event): 3 selectIdx=listbox.curselection() 4 if len(selectIdx)>0: 5 listbox1.delete(0,tk.END) 6 for list in listBoxData[selectIdx[0]]['list']: 7 listbox1.insert(tk.END,list)

解決することができました。
ありがとうございました。

投稿2021/08/07 15:45

Syo-PT

総合スコア22

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問