2017-10-19 45 views
1

代码:Python中的CSV写错误的事情

import tkinter 
import csv 


def mainapp(): 
print ('R') 

def SigUP(): 

U = input1.get() 
P = input2.get() 
R = input3.get() 

def P(): 
    myData = [[U, P, R]] 
    myFile = open('csvexample3.csv', 'w') 
    with myFile: 
      writer = csv.writer(myFile) 
      writer.writerows(myData) 


if U == '' or P == '' or R == '': 
    print ('No') 
else: 
    P() 

def LogIN(): 
U = input1.get() 
P = input2.get() 
R = input3.get() 


main = tkinter.Tk() 

realname = tkinter.Label(main, text='Real Name') 
input3 = tkinter.Entry(main) 
Username = tkinter.Label(main, text='Username') 
input1 = tkinter.Entry(main) 
Password = tkinter.Label(main, text='Password') 
input2 = tkinter.Entry(main, show="*") 
SigUp = tkinter.Button(main, text='Join Us Now', command=SigUP) 
LogIn = tkinter.Button(main, text='Log In', command=LogIN) 

input3.grid(column='2', row='1') 
realname.grid(column='1', row='1') 
input1.grid(column='2', row='2') 
Username.grid(column='1', row='2') 
input2.grid(column='2', row='3') 
Password.grid(column='1', row='3') 
SigUp.grid(columnspan='3', row='5') 
LogIn.grid(columnspan='3', row='4') 

main.mainloop() 

在我的csv文件,我得到这个:

Ben4594,<function SigUP.<locals>.P at 0x101d51950>,Ben 

我希望我的CSV应该是这样的:

Ben4594,Password,Ben 

我使用python 3和tkinter。

+2

你能格式化你的代码吗?这一个不是很好。 – PerunSS

+0

借调,代码没有正确缩进。尝试用四个空格缩进整个代码,然后将其粘贴回问题中。 – mjsqu

+3

看起来,在写入csv的地方,你正在写'P',它实际上是引用函数'P()',而不是你之前分配给变量'P'的输入。使用适当的变量和函数名可以避免这个问题。 –

回答

1

您遭受名称冲突。看看这个点在你的代码:

U = input1.get() 
P = input2.get() 
R = input3.get() 

def P(): 
#  <=============== point of interest 
    myData = [[U, P, R]] 

一个简单的变量P,但你只是改写具有相同名称的函数定义。因此,当你写入你的文件时,你会得到函数的值,即函数描述符。

更改变量名称以避免碰撞。一般来说,使用有意义的名称,你会避免这个问题(和其他许多问题)。

user_id  = input1.get() 
password  = input2.get() 
display_name = input3.get() 

def write_user_to_file(): 
    myData = [[user_id, password, display_name]] 

此外,请考虑使用函数参数,而不是全局变量。

+0

Thankyou那工作 – BENZINI