2016-07-17 51 views
0

自从我收到答案以来,问题已更新。 现在提出的问题是当我有两个“玩家”彼此相邻时,如何从csv文件获取值。Python搜索CSV文件并在Tkinter中返回结果

从Tkinter的进口* 导入CSV

master = Tk() 

b1 = StringVar() 
v1 = StringVar() 
v2 = StringVar() 
v3 = StringVar() 

b2 = StringVar() 
v4 = StringVar() 
v5 = StringVar() 
v6 = StringVar() 

a = Label(master, text="Player 1", font="Verdana 10 bold").grid(row=8, column=1, columnspan=2, pady=15) 
b = Label(master, text="Player Name").grid(row=9, column=1, sticky='w') 
c = Label(master, text="1st Service Percentage:").grid(row=10, column=1, sticky='w') 
cc = Label(master, text="value", textvariable=v1) 
d = Label(master, text="Points Won on 1st Serve: ").grid(row=11, column=1, sticky='w') 
dd = Label(master, text="value", textvariable=v2) 
e = Label(master, text="Points Won on 2nd serve:").grid(row=12, column=1, sticky='w') 
ee = Label(master, text="value", textvariable=v3) 

a22 = Label(master, text="Player 2", font="Verdana 10 bold").grid(row=8, column=3, columnspan=2, pady=15) 
b22 = Label(master, text="Player Name").grid(row=9, column=3, sticky='w') 
c22 = Label(master, text="1st Service Percentage:").grid(row=10, column=3, sticky='w') 
cc22 = Label(master, text="value", textvariable=v4) 
d22 = Label(master, text="Points Won on 1st Serve: ").grid(row=11, column=3, sticky='w') 
dd22 = Label(master, text="value", textvariable=v5) 
e22 = Label(master, text="Points Won on 2nd serve:").grid(row=12, column=3, sticky='w') 
ee22 = Label(master, text="value", textvariable=v6) 


def name(): 
    with open("Service.csv") as fh: 
     for row in fh: 
      if (b1.get()) in row: 
       player_name = row[0:row.find(',')] 
       row = row.replace(player_name+',', '') 
       firstService = row[0:row.find(",")] 
       row = row.replace(firstService+',', '') 
       points_firstserve = row[0:row.find(",")] 
       row = row.replace(points_firstserve+',', '') 
       points_secondserve = row[0:row.find(",")] 
       row = row.replace(points_secondserve+',', '') 
       v1.set(firstService) 
       cc.grid(row=10, column=2, sticky='w') 
       v2.set(points_firstserve) 
       dd.grid(row=11, column=2, sticky='w') 
       v3.set(points_secondserve) 
       ee.grid(row=12, column=2, sticky='w') 
      if (b2.get()) in row: 
       player_name = row[0:row.find(',')] 
       row = row.replace(player_name + ',', '') 
       firstService = row[0:row.find(",")] 
       row = row.replace(firstService + ',', '') 
       points_firstserve = row[0:row.find(",")] 
       row = row.replace(points_firstserve + ',', '') 
       points_secondserve = row[0:row.find(",")] 
       row = row.replace(points_secondserve + ',', '') 
       v1.set(firstService) 
       cc.grid(row=10, column=2, sticky='w') 
       v2.set(points_firstserve) 
       dd.grid(row=11, column=2, sticky='w') 
       v3.set(points_secondserve) 
       ee.grid(row=12, column=2, sticky='w') 

myb1 = Entry(master, textvariable=b1) 
myb1.insert(10, "Andy Murray") 
myb1.grid(row=9, column=2) 

myb22 = Entry(master, textvariable=b2) 
myb22.insert(10, "Novak Djokovic") 
myb22.grid(row=9, column=4) 

button1 = Button(master, text='Run', command=name, bg="light green", font="Verdana 9 bold") 
button2 = Button(master, text='Quit', command=quit, bg="red", font="Verdana 9 bold") 
button1.grid(row=15, column=2, ipadx=50, pady=10) 
button2.grid(row=15, column=3, ipadx=50, pady=10, padx=5) 

master.geometry("850x500+300+100") 
master.bind('<Return>', name) 
master.bind('<Escape>', quit) 
mainloop() 
+1

你需要分割线,并从采取的第一个元素,也许像:'name.split(“”)[0]' –

+0

@DavidZemens,感谢大卫,但我如何得到这个输入进入GUI中的正确行? – Wouter

+0

我不知道你的gui,也不知道你可能想要它。我相信你可以从这里弄清楚,不是吗? –

回答

1

这里我没有使用v1,v2和v3文本变量。在第一个玩家值附近追加第二个玩家值。 输入“安迪·穆雷”点击运行输入“诺瓦克·德约科维奇” 点击运行。你会看到第二个玩家除了第一个玩家值之外的结果。

from tkinter import * 
import csv 

master = Tk() 

b1 = StringVar() 
#v1 = StringVar() 
#v2 = StringVar() 
#v3 = StringVar() 

a = Label(master, text="Player 1", font="Verdana 10 bold").grid(row=8, column=1, columnspan=2, pady=15) 
b = Label(master, text="Player Name").grid(row=9, column=1, sticky='w') 
c = Label(master, text="1st Service Percentage:").grid(row=10, column=1, sticky='w') 
cc = Label(master, text="") 
d = Label(master, text="Points Won on 1st Serve: ").grid(row=11, column=1, sticky='w') 
dd = Label(master, text="") 
e = Label(master, text="Points Won on 2nd serve:").grid(row=12, column=1, sticky='w') 
ee = Label(master, text="") 

def name(): 
    with open("service.csv") as fh: 
     for row in fh: 
      if (b1.get()) in row: 
       player_name = row[0:row.find(',')] 
       row=row.replace(player_name+',','') 
       #print(row) 
       firstService=row[0:row.find(",")] 
       row=row.replace(firstService+',','')     
       points_firstserve=row[0:row.find(",")] 
       row=row.replace(points_firstserve+',','')     
       points_secondserve=row[0:row.find(",")] 
       row=row.replace(points_secondserve+',','')  
       cc['text'] += " "+firstService 
       #v1.set(firstService) 
       cc.grid(row=10, column=2, sticky='w') 
       #v2.set(points_firstserve) 
       dd['text'] += " "+points_firstserve 
       dd.grid(row=11, column=2, sticky='w') 
       #v3.set(points_secondserve) 
       ee['text'] += " "+points_secondserve 
       ee.grid(row=12, column=2, sticky='w')     

myb1 = Entry(master, textvariable=b1) 

myb1.insert(10, "Andy Murray") 

myb1.grid(row=9, column=2) 

button1 = Button(master, text='Run', command=name, bg="light green", font="Verdana 9 bold") 
button2 = Button(master, text='Quit', command=quit, bg="red", font="Verdana 9 bold") 

button1.grid(row=15, column=2, ipadx=50, pady=10) 
button2.grid(row=15, column=3, ipadx=50, pady=10, padx=5) 

master.geometry("850x500+300+100") 
master.bind('<Return>', name) 
master.bind('<Escape>', quit) 
mainloop() 
1
from tkinter import * 
import csv 
master = Tk() 
b1 = StringVar() 
v1 = StringVar() 
v2 = StringVar() 
v3 = StringVar() 
a = Label(master, text="Player 1", font="Verdana 10 bold").grid(row=8, column=1, columnspan=2, pady=15) 
b = Label(master, text="Player Name").grid(row=9, column=1, sticky='w') 
c = Label(master, text="1st Service Percentage:").grid(row=10, column=1, sticky='w') 
cc = Label(master, text="value", textvariable=v1) 
d = Label(master, text="Points Won on 1st Serve: ").grid(row=11, column=1, sticky='w') 
dd = Label(master, text="value", textvariable=v2) 
e = Label(master, text="Points Won on 2nd serve:").grid(row=12, column=1, sticky='w') 
ee = Label(master, text="value", textvariable=v3) 
def name(): 
    with open("Service.csv") as fh: 
     for row in fh: 
      if (b1.get()) in row: 
       player_name = row[0:row.find(',')] 
       row=row.replace(player_name+',','') 
       #print(row) 
       firstService=row[0:row.find(",")] 
       row=row.replace(firstService+',','')     
       points_firstserve=row[0:row.find(",")] 
       row=row.replace(points_firstserve+',','')     
       points_secondserve=row[0:row.find(",")] 
       row=row.replace(points_secondserve+',','')  
       # 
       v1.set(firstService) 
       cc.grid(row=10, column=2, sticky='w') 
       v2.set(points_firstserve) 
       dd.grid(row=11, column=2, sticky='w') 
       v3.set(points_secondserve) 
       ee.grid(row=12, column=2, sticky='w')     
myb1 = Entry(master, textvariable=b1) 
myb1.insert(10, "Andy Murray") 
myb1.grid(row=9, column=2) 
button1 = Button(master, text='Run', command=name, bg="light green", font="Verdana 9 bold") 
button2 = Button(master, text='Quit', command=quit, bg="red", font="Verdana 9 bold") 
button1.grid(row=15, column=2, ipadx=50, pady=10) 
button2.grid(row=15, column=3, ipadx=50, pady=10, padx=5) 
master.geometry("850x500+300+100") 
master.bind('<Return>', name) 
master.bind('<Escape>', quit) 
mainloop() 

这将为特定玩家获取从CSV行号。将值放在GUI中的值名旁边。

希望这会有所帮助。

+0

超,感谢一百万。还有一个问题。如果我有彼此相邻的相同字段,该怎么办?然后点击按钮,我想从两个玩家那里获得详细信息? – Wouter

+0

@Wouter对不起,我没有得到你。 – vinod

+0

现在我有一名球员的结果。但让我们把“播放器2”放在它旁边。当我按下“运行”时,我想要从2名球员中填入结果。这可能吗? – Wouter

相关问题