Python搜索CSV文件并在Tkinter中返回结果

时间:2016-07-17 12:03:55

标签: python python-2.7 tkinter

问题已经更新,因为我收到了答案。 现在提出的问题是当我有两个"玩家"时,如何从csv文件中获取值。彼此相邻。

来自Tkinter进口*     import 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()

2 个答案:

答案 0 :(得分: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中的值名称旁边。

希望这会有所帮助。

答案 1 :(得分:1)

这里我没有使用v1,v2和v3文本变量。在第一个玩家值旁边添加第二个玩家值。 输入“Andy Murray”点击Run下一步输入“Novak Djokovic” 命中运行。你会看到第二个玩家在第一个玩家价值旁边的结果。

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