ここに質問をする前に、私はどこにでも見て、解決策を見つけるためにすべてを試しましたが、見つけられませんでした。選択に基づいてCSVファイルをロード
私はTkinterで簡単なGUIを構築しました。目標は、まずドロップダウンボックスでchoiseに基づいて選択を行うことです。 私の例では、主題は「テニス」です。
私の目標は、ユーザーが最初にテニス試合が行われる「表面」を選択できることです。 3つのチョイスがあります。ハードコート、クレイコートまたはグラスコート。
作成した選択に基づいて、別のCSVファイルをロードします。
- ザ・ハードコートファイルは "match_stats_atp_.csv"
- クレイコートファイルは "match_stats_atp_1.csv"
- 草裁判所のファイルは、 "match_stats_atp_10.csv"
各CSVファイルは特定のテニスサーフェスに基づいてデータを保持します。
私の質問は今、どのようにして、CSVファイルを最初のドロップダウンボックスで選択した内容に基づいてロードするのですか? csvファイルはスクリプトと同じディレクトリにあります。
from Tkinter import *
import ttk
import csv
master = Tk()
master.option_add("*Font", "{Bodoni MT} 8")
content = ttk.Frame(master, padding=(12, 12, 12, 12))
frame = ttk.Frame(content, borderwidth=5, relief="groove", width=300, height=100)
content.grid(column=0, row=0, sticky=(N, S, E, W))
frame.grid(column=0, row=0, columnspan=4, rowspan=2, sticky=(N, S, E, W))
text = Text(content, height=8, width=13)
text.grid(row=0, column=4, columnspan=2, rowspan=2, sticky=(N, S, E, W))
v1player1 = StringVar()
v2player1 = StringVar()
c_player1 = Label(frame, text="Service Points Win %:").grid(row=6, column=1, sticky='w')
cc_player1 = Entry(frame, text="value", textvariable=v1player1, justify='center', width=10).grid(row=6, column=2)
d_player1 = Label(frame, text="Return Points Win %: ").grid(row=7, column=1, sticky='w')
dd_player1 = Entry(frame, text="value", textvariable=v2player1, justify='center', width=10).grid(row=7, column=2)
def new_selection_surface(event):
return surface()
surface_types = ['ATP Hard Court', 'ATP Clay Court', 'ATP Grass Court']
box_value_surface = StringVar()
box = ttk.Combobox(frame, textvariable=box_value_surface, justify='center')
box.bind("<<ComboboxSelected>>", new_selection_surface)
box['values'] = surface_types
box.current()
box.grid(column=2, row=1, pady=10, padx=15)
def surface():
if 'ATP Hard Court' in box_value_surface.get():
return 'match_stats_atp_.csv'
else:
if 'ATP Clay Court' in box_value_surface.get():
return 'match_stats_atp_1.csv'
else:
if 'ATP Grass Court' in box_value_surface.get():
return 'match_stats_atp_10.csv'
f = open('CSV FILE BASED ON SELECTION 1st DROPDOWN BOX')
csv_f = csv.reader(f)
players_names = []
for row in csv_f:
players_names.append(row[2])
def new_selection_p1(event):
return player1()
box_value_p1 = StringVar()
box = ttk.Combobox(frame, textvariable=box_value_p1, justify='center')
box.bind("<<ComboboxSelected>>", new_selection_p1)
box['values'] = players_names
box.current()
box.grid(column=2, row=2, pady=10, padx=15)
def player1():
with open('CSV FILE BASED ON SELECTION 1st DROPDOWN BOX') as csvfile:
read_csv = csv.reader(csvfile, delimiter=',')
service_points_wins = []
return_points_wins = []
names = []
for row in read_csv:
name = row[2]
services_point = row[10]
returns_point = row[4]
service_points_wins.append(services_point)
return_points_wins.append(returns_point)
names.append(name)
what_name = (box_value_p1.get())
name_dex = names.index(what_name)
service_points_wins = service_points_wins[name_dex]
points_services_point = return_points_wins[name_dex]
v1player1.set(service_points_wins.replace("%", ''))
v2player1.set(points_services_point.replace("%", ''))
run = ttk.Button(content, text='Run')
run.grid(column=4, row=3)
cancel = ttk.Button(content, text="Cancel", command=master.destroy)
cancel.grid(column=5, row=3)
master.columnconfigure(0, weight=1)
master.rowconfigure(0, weight=1)
content.columnconfigure(0, weight=3)
content.columnconfigure(1, weight=3)
content.columnconfigure(2, weight=3)
content.columnconfigure(3, weight=1)
content.columnconfigure(4, weight=1)
content.rowconfigure(1, weight=1)
master.geometry("1000x500+100+100")
master.mainloop()