2017-10-19 51 views
1

code:Python écrit la mauvaise chose dans 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() 

Dans mon fichier csv, je reçois ceci:

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

Je pense que mon csv devrait ressembler à:

Ben4594,Password,Ben 

J'utilise python 3 et tkinter.

+2

pouvez-vous formater votre code? Celui-ci n'est pas destiné bien. – PerunSS

+0

Secondé, le code n'est pas indenté correctement. Essayez d'indenter le code entier de quatre espaces, puis collez-le dans la question. – mjsqu

+3

Il semblerait que lorsque vous écrivez à la csv, vous écrivez 'P' qui fait référence à la fonction' P() ', pas à l'entrée que vous avez assignée à la variable' P' plus tôt. L'utilisation de noms de variables et de fonctions appropriés éviterait ce problème. –

Répondre

1

Vous souffrez d'une collision de noms. Regardez cet endroit dans votre code:

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

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

Vous eu une variable simple P, mais vous venez réenregistrés que, avec une définition de fonction du même nom. Ainsi, lorsque vous écrivez dans votre fichier, vous obtenez la valeur de la fonction, c'est-à-dire le descripteur de fonction.

Modifiez les noms de vos variables pour éviter la collision. En général, utilisez des noms significatifs, et vous éviterez ce problème (et bien d'autres).

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

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

De même, pensez à utiliser les paramètres de fonction à la place des variables globales.

+0

Merci qui a travaillé – BENZINI