Python数据不会输入CSV文件

时间:2016-09-21 20:50:19

标签: python csv tkinter

我正在为我的商店开展一个项目,这个项目可以让我跟踪我的统计过程分析的维度。我有一个2维的部分,我将测量5个样本。尺寸为OAL(全长)和倒圆直径。我让Python和tKinter创建窗口并将所有数据放到正确的位置,但它不会导出到CSV文件。它一直告诉我名称没有定义,但变量确实存在,如果我使用print命令,shell中会出现正确的值。所以我知道变量存在我不确定它是否因为我使用tKinter而不是。任何帮助将不胜感激。

import time
from tkinter import *
import threading
import csv
import datetime


def gui():
    root = Tk()
    root.title("Troy Screw Products")

    titleLabel = Label(root,text="Inspection Worksheet")
    partNumLabel = Label(root,text="Part #68800")
    now = datetime.datetime.now()

    typeLabel = ["Barb Dia","Barb Dia","OAL","Knurl","Threads","Chamfer","OD","OD","OD"]
    dimLabel = [".356",".333",".437",".376","n/a",".258",".337",".321",".305"]
   tolLabel = [".354/.358",".331/.335",".433/.441",".374/.378","1/4-20",".252/.263",".335/.339",".319/.323",".303/.307"]
    observations = ["Obs 1","Obs 2","Obs 3","Obs 4","Obs 5"]
    cd1Obs = []

    Label(text="Inspection Worksheet").grid(row=0,column=0)
    Label(text="Part #68800").grid(row=1,column=0)

    r=0
    for c in typeLabel:
             Label(text=c,relief=RIDGE,width=15).grid(row=2,column=r)
             r=r+1
    r=0            
    for c in dimLabel:
            Label(text=c,relief=RIDGE,width=15).grid(row=3,column=r)
            r=r+1

    r=0            
    for c in tolLabel:
            Label(text=c,relief=RIDGE,width=15).grid(row=4,column=r)
            r=r+1

    r=0            
    for c in tolLabel:
            Checkbutton(width=15).grid(row=5,column=r)
            r=r+1

    Label(text="").grid(row=6,column=1)
    Label(text="").grid(row=7,column=1)

    Label(text="OAL").grid(row=8,column=2)
    Label(text="Barb Dia").grid(row=8,column=6)

    r=9            
    for c in observations:
            Label(text=c,width=15).grid(row=r,column=1)
            Label(text=c,width=15).grid(row=r,column=5)
            r=r+1

    dimOneOb1=StringVar()
    dimOneOb2=StringVar()
    dimOneOb3=StringVar()
    dimOneOb4=StringVar()
    dimOneOb5=StringVar()
    dimTwoOb1=StringVar()
    dimTwoOb2=StringVar()
    dimTwoOb3=StringVar()
    dimTwoOb4=StringVar()
    dimTwoOb5=StringVar()

    Entry(textvariable=dimOneOb1).grid(row=9,column=2)
    Entry(textvariable=dimOneOb2).grid(row=10,column=2)
    Entry(textvariable=dimOneOb3).grid(row=11,column=2)
    Entry(textvariable=dimOneOb4).grid(row=12,column=2)
    Entry(textvariable=dimOneOb5).grid(row=13,column=2)

    Entry(textvariable=dimTwoOb1).grid(row=9,column=6)
    Entry(textvariable=dimTwoOb2).grid(row=10,column=6)
    Entry(textvariable=dimTwoOb3).grid(row=11,column=6)
    Entry(textvariable=dimTwoOb4).grid(row=12,column=6)
    Entry(textvariable=dimTwoOb5).grid(row=13,column=6)

    def submitEntry():
        groupOal1=dimOneOb1.get()
        groupOal2=dimOneOb2.get()
        groupOal3=dimOneOb3.get()
        groupOal4=dimOneOb4.get()
        groupOal5=dimOneOb5.get()

        groupBarb1=dimTwoOb1.get()
        groupBarb2=dimTwoOb2.get()
        groupBarb3=dimTwoOb3.get()
        groupBarb4=dimTwoOb4.get()
        groupBarb5=dimTwoOb5.get()

        writeCsv()

    Button(text="Submit",command=submitEntry).grid(row=14,column=7)

    def writeCsv():
        with open("CD 68800 OAL.csv", "a") as cdOal: #open file and give file variable name; r=read, w=write, a=append
            cdOalWriter = csv.writer(cdOal) #Give writer a variable name
            cdOalWriter.writerow([now.strftime("%Y-%m-%d %H:%M"),groupOal1,groupOal2,groupOal3,groupOal4,groupOal5])
            csOal.close()



    root.mainloop()

op1 = threading.Thread(target = gui)
op1.start()

1 个答案:

答案 0 :(得分:0)

只需在方法writeCsv()中传递这些变量即可。由于 groupOas submitEntry()函数的本地函数,因此其调用函数writeCsv不会看到此类对象。此外,下面使用对象列表的argument unpack idiom*(我注释掉更详细的行):

def submitEntry():
    groupOal1=dimOneOb1.get()
    groupOal2=dimOneOb2.get()
    groupOal3=dimOneOb3.get()
    groupOal4=dimOneOb4.get()
    groupOal5=dimOneOb5.get()
    group0as = [groupOal1,groupOal2,groupOal3,groupOal4,groupOal5]

    groupBarb1=dimTwoOb1.get()
    groupBarb2=dimTwoOb2.get()
    groupBarb3=dimTwoOb3.get()
    groupBarb4=dimTwoOb4.get()
    groupBarb5=dimTwoOb5.get()

    writeCsv(*group0as)
    # writeCsv(groupOal1,groupOal2,groupOal3,groupOal4,groupOal5)

def writeCsv(a, b, c, d, e):
    with open("CD 68800 OAL.csv", "a") as cdOal:
        cdOalWriter = csv.writer(cdOal)
        cdOalWriter.writerow([now.strftime("%Y-%m-%d %H:%M"), a, b, c, d, e])
        csOal.close()