2017-10-19 4 views
1

コードで間違ったこと書いている:私のcsvファイルで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() 

を、私はこの取得:

Ben4594,Password,Ben 

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

を私は私のcsvファイルがどのように見えるべきであると予想されます

私はPython 3とtkinterを使用しています。

+2

コードをフォーマットできますか?これは良いものではありません。 – PerunSS

+0

2番目に、コードは正しくインデントされていません。コード全体を4つのスペースでインデントしてから、質問に戻してください。 – 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

それは働いてありがとう – BENZINI